Ich versuche, eine Reihe von Objekten durch eine Viele-zu-Viele-Beziehung zu filtern. Da das trigger_roles
Feld mehrere Einträge enthalten kann, habe ich den contains
Filter ausprobiert . Aber da das für die Verwendung mit Strings ausgelegt ist, bin ich ziemlich hilflos, wie ich diese Beziehung filtern soll (Sie können die values_list()
atm ignorieren .).
Diese Funktion ist an das Benutzerprofil angehängt:
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)
Mein Workflow-Modell sieht folgendermaßen aus (vereinfacht):
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)
Obwohl die Lösung ziemlich einfach sein mag, wird mein Gehirn es mir nicht sagen.
Danke für Ihre Hilfe.