Dans Django, j'ai deux modèles:Comment faire cette requête de jointure dans Django
class Product(models.Model):
name = models.CharField(max_length = 50)
categories = models.ManyToManyField(Category)
class ProductRank(models.Model):
product = models.ForeignKey(Product)
rank = models.IntegerField(default = 0)
je mets le rang dans une table séparée parce que chaque affichage d'une page entraînera le rang de changer et j'étais inquiet que toutes ces écritures feraient ralentir mes autres requêtes (surtout lues).
: Je réunirai une liste de Products
d'une simple requête:
cat = Category.objects.get(pk = 1)
products = Product.objects.filter(categories = cat)
Je voudrais maintenant obtenir tous les rangs pour ces produits. Je préférerais tout faire en une fois (en utilisant une jointure SQL) et je me demandais comment exprimer cela en utilisant le mécanisme de requête de Django.
Quelle est la bonne façon de le faire dans Django?
Cela ressemble à une optimisation prématurée. Avez-vous des preuves de profileur que "toutes ces écritures ralentiraient mes autres requêtes"? Ou que cet effet est pire que le ralentissement des JOINs supplémentaires quand vous avez besoin de lire le rang? Écrivez-le d'abord simplement et n'optimisez pas avant d'avoir démontré que c'est nécessaire. –