次のモデルを使用する単純なクエリセットがあります。
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'])
オペランドの型が正しくないというエラーが表示されます。良いアイデアはありますか?