获取基于字段的唯一对象的查询集 - Django

时间:2017-04-21 19:10:55

标签: python django sqlite django-queryset

我有大量的车辆库存,并且有很多重复项只有库存号是唯一的。我正在尝试查询所有车辆的列表,但每个型号只需要一辆车,忽略它的库存号字段。

V1.stock_no = 15393

V2.stock_no = 15394

V1.model_no = 98874

V2.model_no = 98874

因此,当在Django中进行查询时,我只希望每个对象的一个​​实例具有该模型。我读了这个Stack Overflow问题Select DISTINCT individual columns in django?,但是

q = ProductOrder.objects.values('Category').distinct()

只返回一个不同的模型编号列表,而不是对象实例和

Productorder.objects.all().distinct('category')

自Django 1.4起可用,仅适用于PostgreSQL,而不适用于SQLite3。

有没有办法用SQLite做到这一点,没有一些人为的循环来完成它?

1 个答案:

答案 0 :(得分:1)

这是一个潜在的解决方案

q = ProductOrder.objects.filter(
    id__in=ProductOrder.objects.values('Category')
                               .distinct()
                               .values_list('id', flat=True))

编辑:或者,您可以尝试

q1 = ProductOrder.objects.values('Category')
                               .distinct()
                               .annotate(x=Max('id'))
q2 = ProductOrder.objects.filter(
    id__in=[i["x"] for i in q1])

我意识到这不是理想的,因为必须循环。