私はdjangoとORMを初めて使用しているので、複数のテーブルを結合するクエリに問題が生じます。Django - 複数のテーブル(モデル)を結合し、それらの属性に基づいてフィルタリングを外します。
I 4つの接合必要モデル有する - Category
、SubCategory
、Product
とPackaging
を、例の値は次のようになります
Category: 'male'
SubCategory: 'shoes'
Product: 'nikeXYZ'
Packaging: 'size_36: 1'
それぞれのモデルは上記のモデルに対してFKを持っています(つまり、 SubCategory
にはフィールドcategory
などがあります)。
私の質問は - どのように私はTrue
からPackaging
属性available
セットを持ってCategory
(例えばオス)とのみを表示する製品与えProduct
をフィルタリングすることができますか?明らかに私のデータベースのヒットを最小限に抑えたい(理想的には1つのSQLクエリで行う)。
available = Product.objects.filter(packaging__available=True)
subcategories = SubCategory.objects.filter(category_id=<id_of_male>)
products = available.filter(subcategory_id__in=subcategories)
を私は考える(available
、subcategories
)少なくとも、そのデータベースに2安打を必要とします。
は、私はこれらの線に沿って何かを行うことができます。一度にそれを行う方法はありますか?読んで
何、このようなものについて: Product.objects.filter(真= packaging__availableは、subcategories__category_id__in = [id_of_male]) - それはテストされていませんが、私は、サブカテゴリがあるべきだと思います複数(related_name)。 –