Je suis nouveau dans django et ORM en général, et ai donc du mal à trouver une requête qui rejoindrait plusieurs tables.Django - joignant plusieurs tables (modèles) et filtrant en fonction de leur attribut
J'ai 4 modèles qui ont besoin d'assemblage - Category
, SubCategory
, Product
et Packaging
, des exemples de valeurs seraient:
Category: 'male'
SubCategory: 'shoes'
Product: 'nikeXYZ'
Packaging: 'size_36: 1'
Chacun des modèles ont FK au modèle ci-dessus (c.-à-d. SubCategory
a le champ category
etc).
Ma question est - comment puis-je filtrer Product
donné une Category
(par exemple des hommes) et seuls les produits montrent qui ont Packaging
attribut available
ensemble à True
? Évidemment, je veux minimiser les hits sur ma base de données (idéalement le faire avec 1 requête SQL).
que je pouvais faire quelque chose le long de ces lignes:
available = Product.objects.filter(packaging__available=True)
subcategories = SubCategory.objects.filter(category_id=<id_of_male>)
products = available.filter(subcategory_id__in=subcategories)
mais qui nécessite 2 résultats sur la base de données au moins (available
, subcategories
) Je pense. Y a-t-il un moyen de le faire en une fois?
Qu'en est-il quelque chose comme ceci: Product.objects.filter (packaging__available = True, subcategories__category_id__in = [id_of_male]) - il n'a pas été testé, mais je pense que les sous-catégories devraient être pluriel (related_name). –