簡體   English   中英

django ORM:查詢三個模型

[英]django ORM : query of three models

嗨,我想知道是否有人可以幫助我解決這個問題,因為我是django的新手。

我有以下型號

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)

我能夠使用此查詢獲得前20個實體。

 ArticleKeywords.objects.values('articleid').annotate(result=Count('keywords')).order_by('-result')[:20]

能夠使用這樣的東西獲得悲傷或快樂的文章

ArticleTone.objects.filter(name= 'sad');

但是我如何將這些碎片放在一起以獲得包含前20篇悲傷或快樂文章的所有文章。 任何幫助表示贊賞

您可以使用Q對象

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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM