2017-12-13 2 views
0

私は2つのクエリーセットを結合したいと思います。ケースを使用したクエリーセットのフィルター/フィールドの値ではなくモデルフィールドの場合

私はdocumentationに、クエリーセットのフィルタリングに使用できることを見てきました。注釈だけでなく、私が必要とするものです。しかし、フィールドの値ではなく、モデルフィールド自体にケース/時間を使用したいと思います。

プロジェクトは電子商取引です。私はdjango-oscarを使用していますので、ここに投稿するにはモデルがかなり大きいです。知るべきことは、バスケットラインは製品を指し、製品は親、子、またはスタンドアロンのいずれかであることができます。ここで

は私のコードです:バスケットラインは子であること、製品に関連する場合、それはスタンドアロン製品に関連する場合(たのに対し

self.in_stock_lines = basket.lines.filter(product__product_class__track_stock=True, is_customized=False) 

事は、私が上でフィルタリングしなければならない分野は、product__parent__product_class__track_stockです親ではない)、それは私の最初のクエリーセットと同じようにproduct__product_class__track_stockのままです。

これを行う方法はありますか?あるいは、私は選択肢がありませんが、例えばitertools.chain()を使って2つのクエリーセットを組み合わせるのですか?

+0

あなたのモデルを投稿してください.....また、mpttを見て、あなたが探しているものを達成するのが簡単かもしれません。製品の製品を持っているとどうなりますか?... https://github.com/django-mptt/django-mptt – Walucas

+0

私の質問を編集しました。モデルが大きすぎてここに投稿できません電子商取引)。しかし、製品の製品の製品は存在しません。それは親子関係またはスタンドアロン(それ自体で)立っています。 – gamabounta

答えて

1

Qオブジェクトを使用できます。

from django.db.models import Q 

basket.lines.filter(
    Q(product_parent__isnull=True, product__product_class__track_stock=True) | 
    Q(product__parent__product_class__track_stock=True), is_customized=False) 
+1

それはうまく動作します、ありがとう! – gamabounta

関連する問題