Python Django:计算与查询匹配的内容标记
我需要在Django中构建一个查询,我觉得我在这里有点不知所措,任何帮助都是非常感谢的。 我有内容和标签,它们之间有一个关系表:Python Django:计算与查询匹配的内容标记,python,django,postgresql,django-models,Python,Django,Postgresql,Django Models,我需要在Django中构建一个查询,我觉得我在这里有点不知所措,任何帮助都是非常感谢的。 我有内容和标签,它们之间有一个关系表: class Content(mixins.TracketEntity): publisher = models.ForeignKey(User) title = models.CharField(max_length=256, null=False, blank=False) data = jsonfield.JSONField() clas
class Content(mixins.TracketEntity):
publisher = models.ForeignKey(User)
title = models.CharField(max_length=256, null=False, blank=False)
data = jsonfield.JSONField()
class Tag(mixins.TracketEntity):
publisher = models.ForeignKey(User)
name = models.CharField(max_length=256, null=False, blank=False)
class ContentTag(models.Model):
content = models.ForeignKey(Content)
tag = models.ForeignKey(Tag)
现在,我可以按标题过滤内容,例如:
content_query = Content.objects.filter(title__icontains="matematica")
这将给出一个目录,比如:
- 马蹄莲
- 马蹄莲
- 无叶Matematica aplicada
- 阿旺卡马蒂卡酒店
- 马蹄莲。标签=MATEMATICA,简单
- 马蹄莲。标记=MATEMATICA
- 马蹄莲。标签=MATEMATICA,硬
- 马蹄莲。标签=MATEMATICA,硬
- 马特马蒂卡,4
- 轻松,1
- 硬的,2
我应该在数据库上添加哪些索引以使其正常运行?获取与标题包含“matematica”的
内容
实例相关的所有标记
然后,数一数标签
result_dict = {}
for tag in tags:
result_dict[tag.name] +=1
实际上,您只需通过聚合在单个查询中即可完成此操作:
from django.db.models import Count
tags = (Tag.objects
.filter(content__title__icontains='matematica')
.values('name')
.annotate(tag_count=Count('tag')))
为了实现这一点,您需要在标记
上添加一个manytomy
声明,该声明使用现有的直通表ContentTag
:
content = models.ManyToManyField('Content', through='ContentTag')
因为through表已经存在,这根本不会改变您的数据库。我更新了我的答案。非常感谢。你刚刚救了我们一天,先生:-)
content = models.ManyToManyField('Content', through='ContentTag')