Django ManyToMany Relation"包含"声明

时间:2014-10-08 21:54:31

标签: python sql django database orm

我正在构建一个小任务管理器,所有任务都有标签。我需要选择所有具有一些标签的任务。在片刻,我正在做:

    tasks = Task.objects.all().filter(labels__in=label_list).distinct()

返回所有任务,其中至少有一个标签也在label_list中,但我只需要包含label_list中所有标签的Tasks。

更精确的示例:如果我将['1','2']作为label_list传递,我希望所有带有标签1 OR标签2的任务都是返回(现在正在发生的事情),但希望返回标签1 AND标签2的所有任务。

我想要标签包含标签列表

的任务

Relation Task-Label是ManyToMany:

class Task(models.Model):
    ....
    labels = models.ManyToManyField(Label, null=True, blank = True)
    ....

1 个答案:

答案 0 :(得分:1)

这已经达到了django ORM的极限,但你可以试试:

labels = ['1', '2']
qs = Task.objects.all()
for label in labels:
    qs = qs.filter(labels=label).distinct()

显然非常难看,对于很长的标签列表来说,这将是一项相当昂贵的操作,但它可能会帮助你。

或者,您可以查看django-taggit这是一个成熟的django标记应用程序,它提供类似的标签'功能。他们处理'包含'使用原始SQL的问题。