Sto cercando di filtrare un gruppo di oggetti attraverso una relazione molti-a-molti. Poiché il trigger_roles
campo può contenere più voci, ho provato il contains
filtro. Ma poiché è progettato per essere utilizzato con le stringhe, sono praticamente impotente su come filtrare questa relazione (puoi ignorare l' values_list()
atmosfera.).
Questa funzione è collegata al profilo utente:
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)
Il mio modello di flusso di lavoro è simile a questo (semplificato):
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)
Anche se la soluzione potrebbe essere abbastanza semplice, il mio cervello non me lo dice.
Grazie per l'aiuto.