我有一个使用以下模型的简单查询集:
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: cannot concatenate 'str' and 'int' objects
等效的 SQL 有效。但是,如果可以的话,我想使用标准的 django ORM。
select * from quiz_question where type=1 order by abs(difficulty-10)
我已经尝试使用该extra()
方法。特别是指定方程的选择参数,以及order_by
进行排序的参数。
...
theta=10
q=question.object.filter(type=1).extra(select={'diff': abs('difficulty-10')}).extra(order_by=['diff'])
我得到一个错误的操作数类型错误。有什么好主意吗?