2016-06-24 13 views
0

Django ORMを使用してサブクエリ結果をスカラー値と比較することはできますか?私はこれを変換するために苦労しています:スカラ値を持つDjangoサブクエリ

SELECT payment_subscription.* 
FROM payment_subscription payment_subscription 
    JOIN payment_recurrent payment_recurrent ON payment_subscription.id = payment_recurrent.subscription_id 
WHERE 
    payment_subscription.status = 1 
    AND (SELECT expiration_date 
     FROM payment_transaction payment_transaction 
     WHERE payment_transaction.company_id = payment_subscription.company_id 
      AND payment_transaction.status IN ('OK', 'Complete') 
     ORDER BY payment_transaction.expiration_date DESC, payment_transaction.id DESC 
     LIMIT 1) <= ? 

主なポイントは以下のとおりです。

  1. 任意のパラメータを使用して、サブクエリのスカラー値の最後の比較。
  2. 会社IDでサブクエリと外側のクエリ間の結合

答えて

0
Subscription.objects.annotate(
    max_expiraton_date=Max('transaction__expiration_date') 
).filter(
    status=1, 
    recurrent__isnull=False, # [inner] join with recurrent 
    transaction__status__in=['OK', 'Complete'], 
    max_expiraton_date=date_value 
) 

これは、他のSQLクエリを生成するが、同じSubscriptionオブジェクトを取得します。

関連する問題