2

この生の SQL クエリを書き込もうとしていますが、

info_model = list(InfoModel.objects.raw('SELECT *, 
              max(date),  
              count(postid) AS freq,     
              count(DISTINCT author) AS contributors FROM        
              crudapp_infomodel GROUP BY topicid ORDER BY date DESC'))

django クエリとして。「著者」と「投稿」の関連フィールドを取得できないため、次の試行は機能しません。

  info_model = InfoModel.objects.values('topic')
                 .annotate( max=Max('date'), 
                  freq=Count('postid'),              
                  contributors=Count('author', 
                  distinct=True))
                  .order_by('-max')

生の SQL では SELECT * を使用できますが、Django クエリで同等のことを行うにはどうすればよいでしょうか?

モデルは、

class InfoModel(models.Model):
    topicid = models.IntegerField(default=0)
    postid = models.IntegerField(default=0)
    author = models.CharField(max_length=30)
    post = models.CharField(max_length=30)
    date = models.DateTimeField('date published')

以前、この問題をここに投稿しましたDjango Using order_by with .annotate() and gets related field

4

2 に答える 2

3

私はあなたが最大の日付までに注文したいと思うので:

InfoModel.objects.values('topic')
                 .annotate(
                     max=Max('date'), freq=Count('postid'),              
                     contributors=Count('author', distinct=True))
                 .order_by('max')
于 2016-06-18T20:47:10.657 に答える