J'essaie de filtrer un ensemble d'objets à travers une relation de plusieurs à plusieurs. Comme la relation trigger_roles
peut contenir plusieurs entrées, j'ai essayé l'option contains
filtre. Mais comme ce filtre est conçu pour être utilisé avec des chaînes de caractères, je ne sais pas comment filtrer cette relation (vous pouvez ignorer l'élément values_list()
atm.).
Cette fonction est rattachée au profil de l'utilisateur :
def getVisiblePackages(self):
visiblePackages = {}
for product in self.products.all():
moduleDict = {}
for module in product.module_set.all():
pkgList = []
involvedStatus = module.workflow_set.filter(trigger_roles__contains=self.role.id,allowed=True).values_list('current_state', flat=True)
Mon modèle de flux de travail se présente comme suit (simplifié) :
class Workflow(models.Model):
module = models.ForeignKey(Module)
current_state = models.ForeignKey(Status)
next_state = models.ForeignKey(Status)
allowed = models.BooleanField(default=False)
involved_roles = models.ManyToManyField(Role, blank=True, null=True)
trigger_roles = models.ManyToManyField(Role, blank=True, null=True)
Bien que la solution puisse être très simple, mon cerveau ne me le dit pas.
Merci pour votre aide.