2017-04-21 48 views
0

我拥有大量的车辆库存,并且有很多重复项只通过库存号唯一。我试图查询所有车辆的列表,但只需要为每个型号编号一辆车,而忽略它的库存号字段。获取基于字段的唯一对象的查询集 - Django

V1.stock_no = 15393

V2.stock_no = 15394

V1.model_no = 98874

V2.model_no = 98874

所以在Django做一个查询时,我只需要使用该型号的每个对象的一个​​实例。我读这个堆栈溢出问题Select DISTINCT individual columns in django?,但

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

刚刚返回型号的不同列表,而不是对象实例,

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

因为Django的1.4提供,只适用于PostgreSQL的,而不是SQLite3。

有没有办法用SQLite做到这一点,而没有一些人为循环来做到这一点?

回答

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]) 

我意识到这是不理想的。然而,由于其循环。

+0

当我得到'model_no'值的不同列表时,它确实将列表从2869缩小到了639,但.values_list('id',flat = True)似乎将列表计数重置为全部实例,2869.如果.values将相应实例的id返回给值列表,那将会很好。 – JBT

+0

好的,做了一个编辑。 – user6731765

+0

甜!不幸的是,对于我来说,基于查询字符串参数,我在查看函数中有更多的过滤,现在我得到了'太多的SQL变量'错误,但我相信你的答案可能是在SQLite数据库上执行此查询的最有效方法。 – JBT

相关问题