2017-03-17 86 views
0

這樣有方案:分組查詢集Django的

class Model1(models.Model): 
    pass 


class Model2(models.Model): 
    model1 = models.ForeignKey(Model1) 
    date = models.DateField() 


class Model3(models.Model): 
    model2 = models.ForeignKey(Model2) 

我需要查詢其獨特model2__model1__id和至少model2__dateModel3。 我已經成功使用QuerySet.extra()方法,使所需的查詢,如:

Model3.objects.order_by('model2__date').extra(select={'m1_id': 'DISTINCT `app_model2`.`model1_id`'}) 

但恐怕也不會額外分類法,等工作 我也不想使用原始查詢,那些不支持排序以及數據庫級別的切片(可能會有大量的記錄)。

有沒有更正確的方法來做我想要實現的目標?

UP: 我使用MySQL數據庫後端,所以distinct()字段名不可

回答

0

我已經找到了lution:模塊django-group-by,用戶可以應用到分組查詢集,這樣的:

Model3.objects.group_by('model2__model1') 

(您需要GroupByMixin混入模型管理器)

1

我知道你可以做以下

Model3.objects.order_by('model2__model1_id', 'model2__date').distinct('model2__model1_id') 

不幸的是它不是由model2.date排序,但對於每個model1.idmodel2.date是最少的,它按型號1排序ID

+0

哦,是的,我忘了說,我不能使用PostgreSQL,所以'distinct(* field_names)'不可用。 – bakatrouble

+1

我想加上額外的東西可能是當時要走的路。 –