J'essaye de filtrer un groupe d'objets à travers une relation plusieurs-à-plusieurs. Parce que le trigger_roleschamp peut contenir plusieurs entrées, j'ai essayé le containsfiltre. Mais comme cela est conçu pour être utilisé avec des chaînes, je suis pratiquement incapable de filtrer cette relation (vous pouvez ignorer l' values_list()atm.).
Cette fonction est attachée au profil 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 workflow ressemble à ceci (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 soit assez simple, mon cerveau ne me le dira pas.
Merci de votre aide.