多対多の関係で多数のオブジェクトをフィルタリングしようとしています。trigger_roles
フィールドに複数のエントリが含まれている可能性があるため、contains
フィルタを試しました。しかし、それは文字列で使用するように設計されているので、この関係をどのようにフィルタリングするかはほとんど無力です(values_list()
atmは無視できます)。
この関数は、ユーザープロファイルに添付されています。
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)
私のワークフローモデルは次のようになります(簡略化):
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)
解決策は静かで単純かもしれませんが、私の脳は私に教えてくれません。
ご協力いただきありがとうございます。