Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 多对多以及如何从queryset获取queryset_Django_Django Queryset - Fatal编程技术网

Django 多对多以及如何从queryset获取queryset

Django 多对多以及如何从queryset获取queryset,django,django-queryset,Django,Django Queryset,我有以下型号: class Product(models.Model): name = CharField(max_length=30) class Store(models.Model): name = CharField(max_length=30) product = models.ManyToManyField(Product) 如何获取名为product\u name的产品的Stores,以及获取所有产品(名为product\u name的产品除外)?可以在

我有以下型号:

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

class Store(models.Model):
    name = CharField(max_length=30)
    product = models.ManyToManyField(Product)
如何获取名为
product\u name
的产品的
Store
s,以及获取所有产品(名为
product\u name
的产品除外)?可以在一个查询中完成吗?
在原始SQL中,它将是简单的
JOIN
s。不知道如何通过Django实现它。

您应该能够根据产品属性筛选存储,然后预取检索到的对象的相关信息

Store.objects.filter(product__name="product_name").prefetch_related('product')
这应该以最少的次数访问数据库,以实现您想要的目标-两次


可以找到进一步的文档。

由于Django的惰性queryset评估,您实际上可以用它来做这些事情。Django在字段查找中的
同时接受列表和查询集。以下内容将创建嵌套的SQL代码:

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

Django
是否在
文档中。

获取名为“product\u name”的产品的门店:

获取除名为“product_name”的产品之外的所有产品:

这不会将“产品名称”产品从预回迁相关结果中排除
Store.objects.filter(product__name='product_name')
Product.objects.exclude(name='product_name')