Saya mencoba memfilter sekumpulan objek melalui relasi banyak-ke-banyak. Karena trigger_roles
bidang mungkin berisi banyak entri, saya mencoba contains
filter. Tapi karena itu dirancang untuk digunakan dengan string, saya cukup tidak berdaya bagaimana saya harus memfilter hubungan ini (Anda dapat mengabaikan values_list()
atm.).
Fungsi ini dilampirkan ke profil pengguna:
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)
Model alur kerja saya terlihat seperti ini (disederhanakan):
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)
Meskipun solusinya mungkin cukup sederhana, otak saya tidak akan memberi tahu saya.
Terima kasih atas bantuan Anda.