查询多个ManyToMany字段

时间:2013-04-18 03:06:35

标签: python django

我的模型Entry带有ManyToMany字段:

tags = models.ManyToManyField(Tag)

Tag模型很简单:

class Tag(models.Model):

    name = models.CharField(max_length=25)

    def __unicode__(self):
        return self.name

我想创建一个函数getEntryByTags,它接受​​标记名称列表并返回包含这些标记的任何条目。如果我知道标签的数量和每个标签的名称,这将是微不足道的:

Entry.objects.filter(tags__name="tech").filter(tags__name="music").filter(tags__name="other")

但由于这将基于用户输入而且标签号将是可变的,我不知道如何继续。如何迭代多项列表以获取包含每个具有列表中所示名称的ManyToMany对象的对象?

1 个答案:

答案 0 :(得分:1)

你可以尝试,

from django.db.models.query_utils import Q

tag_name_list = xxx # dynamic tag name list based on user input

query_list = [Q(tags__name=tag_name) for tag_name in tag_name_list]
query_set = Entry.objects
for query in query_list:
    query_set = query_set.filter(query)
return query_set