我正在尝试通过多对多关系过滤一堆对象。因为trigger_roles
字段可能包含多个条目,所以我尝试使用contains
过滤器。但是,由于它被设计用于字符串,我几乎无法确定如何过滤这个关系(您可以暂时忽略values_list()
)。
这个函数附加在用户资料上:
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)
虽然解决方案可能很简单,但我的大脑没告诉我。
谢谢你的帮助。
self.role.id
中的值是触发器角色之一,则该筛选器应该检索所有工作流,在这些工作流中,触发器角色之一是self.role.id
中的值。基本上,这将表现得像一个“包含”函数。除非我们都漏掉了什么。 - Jordan Reitermodule.workflow_set.filter(trigger_roles=self)
是正确的方法。 - Paul Whipp