假定存在一个包含所有要搜索的键的列表,称为taglist
。要过滤taglist
中的所有帖子包含标签,我使用以下命令。
Post.objects.filter(tags__tag__in=taglist).order_by('-id')
和class Post
tags = models.ManyToManyField('PostMention')
在PostMenthion
class PostMention(models.Model):
tag = models.CharField(unique=True,max_length=200)
,我将获得有关结果的查询列表。
我可以得到像(each_result,tag_that_used_to_found_the_result)
这样的元组列表吗?
答案 0 :(得分:1)
是的,我们可以.annotate(..)
每行加上相关的Tag
:
from django.db.models import F
Post.objects.filter(
tags__tag__in=taglist
).annotate(
the_tag=F('tags__tag')
).order_by('-id')
此处Post
对象将具有一个额外的属性.the_tag
,其中包含匹配的标记的字符串。如果多个标签匹配,则多个Post
对象将位于查询集中,每个对象具有其.the_tag
属性。
我们可以将其后处理为2元组,但是我认为属性是一个更好的选择,因为这样就可以清楚地知道该字段包含的内容。