0

我有一个模型,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 对象以及列表中表示的名称?

4

1 回答 1

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
于 2013-04-18T03:12:34.667 回答