Django查询 - 按一对通用关系字段的计数排序

时间:2013-04-16 18:09:00

标签: django generics sql-order-by relation

我有一个模型,Tic,与我的应用程序中的其他模型具有通用的外键关系。

class Tic(models.Model):    
    user = models.ForeignKey(User)
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField() 
    content_object = generic.GenericForeignKey('content_type', 'object_id')
    added = models.DateTimeField(auto_now_add=True)

    class Meta:
        unique_together = ('user', 'content_type', 'object_id')

我想查询此模型并完成以下操作:

  • 限制为" Tics"过去一周
  • 按(content_type,object_id)对的出现排序(最高的第一个)
  • 能够跟踪返回的对象(例如,如果返回" Movie"对象,则能够执行tic [0] .content_object.movi​​e_title)

到目前为止,我有以下查询来获取正确的Tics,但我只能让它作为值列表正常工作。

d = date.today() - timedelta(days=14)
t = Tic.objects.filter(added__gt = d).values('content_type','object_id').annotate(num_tic = Count('id')).order_by('-num_tic')

知道如何获得类似的查询来返回对象吗?

修改

为了跟进,我能够通过使用原始查询来实现这一目标:

sql = 'SELECT *, COUNT(*) AS count FROM tics_tic WHERE content_type_id = '+ str(movie_ct.id) +' GROUP BY content_type_id, object_id ORDER BY Count DESC'

1 个答案:

答案 0 :(得分:0)

........只需取出.values ...