I have following models:
class Product(models.Model):
name = CharField(max_length=30)
class Store(models.Model):
name = CharField(max_length=30)
product = models.ManyToManyField(Product)
How to get Store
s with product named product_name
and also, get all the products (except the product with name product_name
) ? Is it possible to make it in one query?
In raw SQL it would be simple JOIN
s. Not sure how to implement it via Django.
Get Stores with product named "product_name" :
Get all the products except the product with name "product_name":
You should be able to filter the stores based on an attribute of Product, and then prefetch_related of the retrieved objects.
This should hit the database the fewest times to achieve what you are looking for - twice.
Further documentation can be found here.
You can actually do these things with Django due to it's lazy queryset evaluation. Django's
in
field lookup accepts both lists and querysets. The following will create a nested SQL code:Here are the Django
in
docs.