Many to many and how to get a queryset from queryset

前端 未结 3 1054
梦如初夏
梦如初夏 2020-12-30 06:48

I have following models:

class Product(models.Model):
    name = CharField(max_length=30)

class Store(models.Model):
    name = CharField(max_length=30)
            


        
相关标签:
3条回答
  • 2020-12-30 07:19

    You should be able to filter the stores based on an attribute of Product, and then prefetch_related of the retrieved objects.

    Store.objects.filter(product__name="product_name").prefetch_related('product')
    

    This should hit the database the fewest times to achieve what you are looking for - twice.

    Further documentation can be found here.

    0 讨论(0)
  • 2020-12-30 07:24

    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:

    products = Product.objects.filter(store_set__in=stores_qs)
    stores_qs = Store.objects.filter(product__name='product_name')
    

    Here are the Django in docs.

    0 讨论(0)
  • 2020-12-30 07:31

    Get Stores with product named "product_name" :

    Store.objects.filter(product__name='product_name')
    

    Get all the products except the product with name "product_name":

    Product.objects.exclude(name='product_name')
    
    0 讨论(0)
提交回复
热议问题