【发布时间】:2016-08-12 18:10:08
【问题描述】:
我有两个模型 A、B
Mysql查询是
SELECT a.ID FROM a INNER JOIN b ON ( a.ID = b.id ) WHERE ( b.key = 'vcount' ) AND (a.type = 'abc') AND (a.status = 'done') ORDER BY b.value+0 DESC LIMIT 0, 5
//这里b.value是longtext字段,所以加0转成Integer,然后排序。
我需要相同的 Django 查询。
我试过了
A.objects.filter(b__key ="vcount",type = "abc",status = "done").order_by('-b__value')[:5]
但上面的 Django 查询给出了错误的结果,因为它是按 Ascii 值排序的
因此需要将'value'字段转换为Integer然后需要对其进行排序。
我也尝试过以下一种,但报错
xyz = A.objects.filter(b__key ="vcount",type = "abc",status = "done").extra(select={'value_int': "CAST(b__value AS UNSIGNED)"}).order_by('-value_int')[:5]
建议或帮助将不胜感激。
【问题讨论】:
-
你的 django 模型中的
b_value是什么?小数域? -
我认为使用
extra()是正确的方法。错误是什么? -
b 是模型名称,值是字段名称。所以 b__value 是用 order_by 写的。
-
@C14L ,我无法打印/使用 xyz ,如果我尝试打印 xyz ,则会出现类似 django.db.utils.OperationalError: (1054, "Unknown column 'b__value'在“字段列表”中”)
-
好吧...你的模型中的
value是什么?十进制字段?