Python Django:连接两个表,并使用第二个表中的额外字段作为order_by

Python Django:连接两个表,并使用第二个表中的额外字段作为order_by,python,mysql,django,Python,Mysql,Django,我有两种型号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以转换为整数,然后进行排序 我需要Django查询同样的内容 我试过这个 A.objec

我有两种型号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以转换为整数,然后进行排序

我需要Django查询同样的内容

我试过这个

A.objects.filter(b__key ="vcount",type = "abc",status = "done").order_by('-b__value')[:5]  
但上面的Django查询给出了错误的结果,因为它是按Ascii值排序的

所以需要将“value”字段转换为整数,然后对其进行排序

我也尝试了下面的一个,但给出了错误

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]
建议或帮助将不胜感激。

方法的
.extra()
select采用SQL,因此列名应写为SQL
b.value

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]

既然我很确定这就是问题所在,我无论如何都要写出来

我猜
value
是一个
DecimalField
,它作为一个字符串存储在内部用于索引,这就是为什么您会看到奇怪的排序


解决方案是将值的类型从
DecimalField
更改为
FloatField

django模型中的
b_值是什么?DecimalField?我认为使用
extra()
是正确的方法。错误是什么?b是模型名,值是字段名。所以b_uu值是按顺序写入的。@C14L,我无法打印/使用xyz,如果我尝试打印xyz,它会给出类似于django.db.utils.OperationalError的错误:(1054,“字段列表”中的未知列“b_u值”)然后。。。您的模型中的
值是多少?十进制字段?