2017-06-22 37 views
1

嗨,我想知道是否有人可以幫助我解決這個問題,因爲我是django的新手。django ORM:查詢三個模型

我有以下型號

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悲或喜的文章篇文章。任何幫助表示讚賞

回答

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] 
+0

我想這一點,但實際上並沒有給我的前20悲或喜的文章(基於他們的文章中出現。無論哪種方式,感謝您的幫助。去捅了一下週圍更得到它 – tom1123