嗨我想知道是否有人可以帮我解决这个问题,因为我是django的新手。
我有以下型号
elements
我能够使用此查询获得前20个实体。
class Article(models.Model):
articleid = models.CharField(primary_key=True,max_length=20)
author = models.CharField(max_length=300)
title = models.CharField(max_length=500)
# Each article can only have one ArticleTone
class ArticleTone(models.Model):
label = (
('sad', 'Sad'),
('happy', 'Happy'),)
articleid = models.ForeignKey(Article, on_delete=models.CASCADE, db_column="article")
tone = CharField(max_length=10,choices=label,blank=False, null=False)
class Meta:
ordering = ('tone',)
# Each article will have 5 keywords
class ArticleKeywords(models.Model):
articleid = models.ForeignKey(Article, on_delete=models.CASCADE, db_column="article")
keywords = models.CharField(max_length=100,blank=False, null=False)
并且能够使用类似这样的内容获得悲伤或快乐的文章
ArticleKeywords.objects.values('articleid').annotate(result=Count('keywords')).order_by('-result')[:20]
但是我如何把各个部分放在一起以获得包含前20篇悲伤或快乐文章的所有文章。任何帮助表示赞赏
答案 0 :(得分:0)
您可以使用Q objects。
from django.db.models import Q
q = Q(name='sad') | Q(name='happy')
ArticleTone.objects.filter(q).values('articleid').annotate(result=Count('keywords')).order_by('-result')[:20]