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()メソッドを使ってみました。具体的には、方程式を指定する select 引数と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 に答える