Django/Postgres:从不同的集合中选择
我有这些模型:Django/Postgres:从不同的集合中选择,django,postgresql,django-models,distinct,django-orm,Django,Postgresql,Django Models,Distinct,Django Orm,我有这些模型: class Product(Model): ... class Scanning(Model): product = ForeignKey(..) datetime = DateTimeField(...) ... 我正在尝试对每个产品进行一次扫描,其中扫描是来自product.scanning.all()set的最新扫描 s1 = (product1,01.01.1000) s2 = (product2,01.01.1200) s3 = (p
class Product(Model):
...
class Scanning(Model):
product = ForeignKey(..)
datetime = DateTimeField(...)
...
我正在尝试对每个产品进行一次扫描,其中扫描是来自product.scanning.all()
set的最新扫描
s1 = (product1,01.01.1000)
s2 = (product2,01.01.1200)
s3 = (product1,01.01.1900)
s4 = (product2,01.01.1988)
s5 = (product3,01.01.2015)
s6 = (product3,01.01.1970)
将返回
引发异常:
编程错误:表达式上的SELECT DISTINCT必须匹配初始值
按表达式排序第1行:在上选择“不同”
(“产品应用程序扫描”,“产品id”)“专业。。。
^
如何使其工作?对于postgres,您不能对字段执行
区分,除非您也按以下方式排序:
Scanning.objects.filter(product__user=u,product__active=True).distinct('product_id').order_by('product_id', 'datetime')
如果这还不够好,一种解决方案是进行如下双重查询:
q1 = Scanning.objects.filter(product__user=u,product__active=True).values('product_id').distinct().annotate(x=Max('id'))
q2 = Scanning.objects.filter(id__in=[i["x"] for i in q1])
q1 = Scanning.objects.filter(product__user=u,product__active=True).values('product_id').distinct().annotate(x=Max('id'))
q2 = Scanning.objects.filter(id__in=[i["x"] for i in q1])