如何在Django中获取过滤键和结果元组

时间:2018-10-30 07:25:28

标签: python django

假定存在一个包含所有要搜索的键的列表,称为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)这样的元组列表吗?

1 个答案:

答案 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元组,但是我认为属性是一个更好的选择,因为这样就可以清楚地知道该字段包含的内容。