J'essaye de filtrer un groupe d'objets à travers une relation plusieurs-à-plusieurs. Parce que le trigger_roles
champ peut contenir plusieurs entrées, j'ai essayé le contains
filtre. 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.