Je construis un site de commerce électronique. J'ai un modèle de produit qui contient les informations communes à tous les types de produits:requête personnalisée dans django
class Product(models.Model):
name=models.CharField()
description=models.CharField()
categories = models.ManyToManyField(Category)
Ensuite, je dois SimpleProduct et BundleProduct qui ont FK au produit et tenir des informations spécifiques au type de produit. BundleProduct a un champ m2m pour d'autres produits.
class SimpleProduct(Product):
some_field=models.CharField()
class BundleProduct(Product):
products = models.ManyToManyField(Product)
Lors de l'affichage du catalogue, je fais une requête sur le modèle de produit puis une autre requête par produit pour obtenir les informations supplémentaires. Cela implique un grand nombre de requêtes.
Je peux l'améliorer en utilisant select_related sur les champs simpleproduct et bundleproduct. Je peux encore l'améliorer en utilisant l'application select_reverse pour les champs m2m comme les catégories.
Ceci est une grande amélioration mais il y a plus de requêtes requises car un BundleProduct a plusieurs produits qui peuvent aussi avoir des relations avec d'autres produits (produit configurable).
Existe-t-il un moyen d'avoir une seule requête par rapport au produit qui récupèrera les catégories m2m, one2one SimpleProduct et BundleProduct et les produits BundleProduct?
Cette requête personnalisée ressemblera-t-elle à un queryset django avec tous les gestionnaires et propriétés?
Merci
Les deux extra et brut semblent ajouter des champs supplémentaires à l'objet. Est-il possible d'utiliser des requêtes brutes pour les objets imbriqués en profondeur? Dans mon cas product.bundleproduct.products.all() [0] .simpleproduct.categories.all() [2]? – pablo