Python 在Django查询set order by子句中使用绝对函数

Python 在Django查询set order by子句中使用绝对函数,python,django,sql-order-by,Python,Django,Sql Order By,我有一个简单的queryset,它使用以下模型: class question(models.Model): question_id = models.AutoField(primary_key=True) # Field name made lowercase. question = models.TextField() # Field name made lowercase. type = models.IntegerField() # Field name made lowercase.

我有一个简单的queryset,它使用以下模型:

class question(models.Model):
question_id = models.AutoField(primary_key=True) # Field name made lowercase.
question = models.TextField() # Field name made lowercase.
type = models.IntegerField() # Field name made lowercase.    
difficulty = models.DecimalField(max_digits=12, decimal_places=10)
查询集定义为:

...
theta=10
q=question.object.filter(type=1).order_by(abs('difficulty'-theta))
我收到一个TypeError:无法连接'str'和'int'对象

等效的SQL可以工作。不过,如果可以的话,我想使用标准的django ORM

select * from quiz_question where type=1 order by abs(difficulty-10)
我尝试使用
extra()
方法。具体来说,select参数用于指定公式,而
order\u by
参数用于进行排序

...
theta=10
q=question.object.filter(type=1).extra(select={'diff': abs('difficulty-10')}).extra(order_by=['diff'])

我得到一个错误的操作数类型错误。有什么好主意吗?

如果想在order by子句中包含一个变量:q=QUEST.object.filter(type=1).extra(select={diff':q=QUEST.object.filter(type=1).extra(select={diff:“abs(难度θ)”)。order_by(“diff”)注意,这类事情就是SQL注入攻击的产生方式。相反,请使用
select params
()
q = question.object.filter(type=1).extra(
    select={"diff": "abs(difficulty-10)"}).order_by("diff")