Django - 过滤查询 returns 不正确的查询集
Django - filter query returns incorrect queryset
这是我的 Vendor
模型。
class Vendor(models.Model):
cluster = models.ManyToManyField(Cluster)
name = models.CharField(_("vendor name"),max_length=30)
phone = models.IntegerField(_("vendor phone no."),max_length=10)
address = models.CharField(_("vendor address"),max_length=70)
objects = VendorManager()
def __str__(self):
return self.name
cluster
是从Vendor
到Cluster
的一个ManyToManyField
模型,如下-
class Cluster(models.Model):
clusterName = models.CharField(_("Locality name"),max_length=70)
现在,我运行以下查询-
Vendor.objects.values('id','cluster').all()
这给出了结果 - [{'cluster': 3, 'id': 2}, {'cluster': 3, 'id': 3}, {'cluster': 4, 'id': 3}]
显然,id 为 3 的供应商与 id 为 3 和 4 的两个集群相关,而 id 为 2 的供应商与 id 为 2 的集群相关联。
在运行宁,
Vendor.objects.values('id','cluster').filter(cluster=3)`
我预计会 return [{'cluster': 3, 'id': 2}, {'cluster': 3, 'id': 3}]
但是,returns
[{'cluster': 3, 'id': 2}, {'cluster': 3, 'id': 3}, {'cluster': 4, 'id': 3}].
我不确定,但这可能是因为 .filter()
找到了与集群 ID 3 对应的供应商 ID,然后 return 找到了与该特定供应商 ID 对应的所有 QuerySet。
但是,我希望它 return 仅那些映射到该集群 ID 的查询。
尝试将 filter
子句放在 values
子句之前
我不是 100% 确定为什么...奇怪的是文档说这无关紧要:
https://docs.djangoproject.com/en/1.7/ref/models/querysets/#django.db.models.query.QuerySet.values
The people who made Django prefer to put all the SQL-affecting methods first, followed (optionally) by any output-affecting methods (such as values()), but it doesn’t really matter. This is your chance to really flaunt your individualism.
我认为你对原因的猜测可能是正确的
这是我的 Vendor
模型。
class Vendor(models.Model):
cluster = models.ManyToManyField(Cluster)
name = models.CharField(_("vendor name"),max_length=30)
phone = models.IntegerField(_("vendor phone no."),max_length=10)
address = models.CharField(_("vendor address"),max_length=70)
objects = VendorManager()
def __str__(self):
return self.name
cluster
是从Vendor
到Cluster
的一个ManyToManyField
模型,如下-
class Cluster(models.Model):
clusterName = models.CharField(_("Locality name"),max_length=70)
现在,我运行以下查询-
Vendor.objects.values('id','cluster').all()
这给出了结果 - [{'cluster': 3, 'id': 2}, {'cluster': 3, 'id': 3}, {'cluster': 4, 'id': 3}]
显然,id 为 3 的供应商与 id 为 3 和 4 的两个集群相关,而 id 为 2 的供应商与 id 为 2 的集群相关联。
在运行宁,
Vendor.objects.values('id','cluster').filter(cluster=3)`
我预计会 return [{'cluster': 3, 'id': 2}, {'cluster': 3, 'id': 3}]
但是,returns
[{'cluster': 3, 'id': 2}, {'cluster': 3, 'id': 3}, {'cluster': 4, 'id': 3}].
我不确定,但这可能是因为 .filter()
找到了与集群 ID 3 对应的供应商 ID,然后 return 找到了与该特定供应商 ID 对应的所有 QuerySet。
但是,我希望它 return 仅那些映射到该集群 ID 的查询。
尝试将 filter
子句放在 values
子句之前
我不是 100% 确定为什么...奇怪的是文档说这无关紧要:
https://docs.djangoproject.com/en/1.7/ref/models/querysets/#django.db.models.query.QuerySet.values
The people who made Django prefer to put all the SQL-affecting methods first, followed (optionally) by any output-affecting methods (such as values()), but it doesn’t really matter. This is your chance to really flaunt your individualism.
我认为你对原因的猜测可能是正确的