我有一个使用以下模型的简单查询集:
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_by
参数。
...
theta=10
q=question.object.filter(type=1).extra(select={'diff': abs('difficulty-10')}).extra(order_by=['diff'])
我收到错误的操作数类型错误。有什么好主意吗?
答案 0 :(得分:6)
q = question.object.filter(type=1).extra(
select={"diff": "abs(difficulty-10)"}).order_by("diff")