3

モデル プロパティに関数を適用することを意味する複雑なフィルターを作成する必要があります。

同等の SQL クエリは次のとおりです。

SELECT * FROM myModel_table t WHERE abs(t.field1 - :binding_value) <= 50

ここで、binding_value はクライアントから受け取った数値です。

関数を使用してフィールド ルックアップを定義する方法はありますか? または、生のSQLを直接使用する必要がありますか?

ありがとうございました。

4

3 に答える 3

4

この場合、最善の方法は、Django の queryset extra()メソッドを使用することです。

MyModel.objects.extra(where=['abs(field1 - %s) <= 50'], params=[binding_value])
于 2012-08-06T21:20:48.343 に答える
3

私が間違った方法で考えていない場合 (私が間違っている場合は今すぐ許可してください)、クエリを少し「翻訳」して、単純な django フィルタリングを使用することができます。

まず、次のことは真実です。

abs(A - B) <= 50

に等しい:

-50 <= A - B <= 50

次に、これは次のようになります。

-50 + B <= A <= 50 + B

次に、クエリは次のようになります。

MyModel.objects.filter(field1__range=(-50+binding_value,50+binding_value))
于 2012-08-07T00:36:26.777 に答える