2017-06-22 1 views
1

Salut je me demande si quelqu'un peut m'aider avec ce problème car je suis nouveau à django.django ORM: requête de trois modèles

J'ai les modèles suivants

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) 

Je suis en mesure d'obtenir les 20 premières entités utilisant cette requête.

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

et en mesure d'obtenir des articles qui sont tristes ou heureux en utilisant quelque chose comme ça

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

Mais comment puis-je mettre les morceaux ensemble pour obtenir tous les articles qui contiennent les 20 premiers articles tristes ou heureux . Toute aide est appréciée

Répondre

0

Vous pouvez utiliser 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

J'ai essayé, mais il ne me donne pas vraiment le top 20 des articles tristes ou heureux (en fonction de leur présence dans un article. Merci de toute façon pour votre aide. Va fouiller un peu plus pour l'obtenir – tom1123