3

我有一个使用以下模型的简单查询集:

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'])

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

4

1 回答 1

7
q = question.object.filter(type=1).extra(
    select={"diff": "abs(difficulty-10)"}).order_by("diff")
于 2013-02-26T01:24:25.440 回答