我的模型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对象的对象?
答案 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