姜戈过滤多对多包含 [英] Django filter many-to-many with contains

查看:35
本文介绍了姜戈过滤多对多包含的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试通过多对多关系对一堆对象进行过滤操作。因为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)

尽管解决方案可能非常简单,但我的大脑不会告诉我。

感谢您的帮助。

推荐答案

您是否尝试过这样的操作:

module.workflow_set.filter(trigger_roles__in=[self.role], allowed=True)

或仅当self.role.id不是PKS列表:

module.workflow_set.filter(trigger_roles__id__exact=self.role.id, allowed=True)

这篇关于姜戈过滤多对多包含的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆