django ORM:查询三个模型

时间:2017-06-22 11:26:54

标签: python django django-orm postgresql-9.1

嗨我想知道是否有人可以帮我解决这个问题,因为我是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篇悲伤或快乐文章的所有文章。任何帮助表示赞赏

1 个答案:

答案 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]