小编Gra*_*per的帖子

Django使用contains过滤多对多

我试图通过多对多关系过滤一堆对象.因为trigger_roles字段可能包含多个条目,所以我尝试了包含过滤器.但是因为它被设计为与字符串一起使用,我几乎无能为力地过滤这种关系(你可以忽略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)
Run Code Online (Sandbox Code Playgroud)

我的工作流模型看起来像这样(简化):

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)
Run Code Online (Sandbox Code Playgroud)

虽然解决方案可能很简单,但我的大脑不会告诉我.

谢谢你的帮助.

python django many-to-many django-models django-orm

68
推荐指数
4
解决办法
7万
查看次数

标签 统计

django ×1

django-models ×1

django-orm ×1

many-to-many ×1

python ×1