Djangoクエリーセットにraw sql句を追加することはできますか? RawSQL
句を通常のクエリーセットに使用することをお勧めします。 通常のクエリーセットでなければならず、rawquerysetではなく、djangoの管理者で使用します。私の具体的な場合にはDjangoクエリーセットにraw sql where句を追加します。
and exists (
select 1
from ...
)
私は2つのモデルCustomer
とSubscription
を持っている:私の特定のケースで
は私が句のadditonal exists
を追加します。 Subscription
には、start
とオプションのend
日付フィールドがあります。
今日、現在のサブスクリプションを持つすべての顧客とクエリセットを取得したいと考えています。このSQL照会のように:
select *
from customers_customer c
where exists (
select 1
from subscriptions_subscription sc
where sc.customer_id = c.id
and sc.start < current_date
and (sc.end is null or sc.end > current_date)
)
私はクエリーセットを作成できませんでした。私が到着した 最善のことは、のようなものだった:
cs = Customer.objects.annotate(num_subscriptions=RawSQL(
'''
select count(sc.id)
from subscriptions_customersubscription sc
where sc.customer_id = customers_customer.id
and sc.start < current_date
and (sc.end is null or sc.end > current_date)
''', []
))
しかし、このクエリはwhere exists
と同様にSQLクエリを実行しません。
?手動でテーブルを結合しようとしていますが、 'Customer.objects.filter(subscriptions__start__lt = current_date)'などの自然にそれを行うことに問題はありましたか? – serg
OK自然結合は機能し、私が持っていたいものを正確に行います...私はちょうどそれを考えなかった... – DanEEStar