有这样的计划:
class Model1(models.Model):
pass
class Model2(models.Model):
model1 = models.ForeignKey(Model1)
date = models.DateField()
class Model3(models.Model):
model2 = models.ForeignKey(Model2)
我需要查询具有唯一Model3
和最少model2__model1__id
的{{1}}。
我已设法使用model2__date
方法进行必要的查询,如下所示:
QuerySet.extra()
但我担心它不会使用额外的排序等工作。 我也不想使用原始查询,因为那些也不支持排序,还有数据库级别的切片(可能有大量的记录)。
有没有更正确的方法去做我想要实现的目标?
UP:
我正在使用MySQL DB后端,因此Model3.objects.order_by('model2__date').extra(select={'m1_id': 'DISTINCT `app_model2`.`model1_id`'})
字段名称不可用
答案 0 :(得分:1)
我知道你可以做以下事情
Model3.objects.order_by('model2__model1_id', 'model2__date').distinct('model2__model1_id')
不幸的是,它没有按model2.date
排序,但对于每个model1.id
,model2.date
最少,而且按照model1 id排序
答案 1 :(得分:0)
我找到了解决方案:模块django-group-by允许将分组应用于查询集,如下所示:
Model3.objects.group_by('model2__model1')
(您需要将GroupByMixin
混合到模型管理器中)