Вот моя модель Vendor
.Django - запрос фильтра возвращает неверный запрос
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
является ManyToManyField
от Vendor
модели Cluster
, которая заключается в следующем -
class Cluster(models.Model):
clusterName = models.CharField(_("Locality name"),max_length=70)
Теперь, я бегу следующие queries-
Vendor.objects.values('id','cluster').all()
Это дает результат - [{'cluster': 3, 'id': 2}, {'cluster': 3, 'id': 3}, {'cluster': 4, 'id': 3}]
Очевидно, что поставщики с идентификатором 3 связан с двумя кластерами с идентификаторами 3 и 4 и поставщика с идентификатором 2 связан с кластером с идентификатором 2.
На беге,
Vendor.objects.values('id','cluster').filter(cluster=3)`
Я ожидал вернуться [{'cluster': 3, 'id': 2}, {'cluster': 3, 'id': 3}]
Однако, он возвращает
[{'cluster': 3, 'id': 2}, {'cluster': 3, 'id': 3}, {'cluster': 4, 'id': 3}].
Я не уверен, но это происходит, вероятно, потому, что .filter()
находит V endor id, которые соответствуют идентификатору кластера 3, а затем возвращают все QuerySets, соответствующие этому конкретному идентификатору поставщика.
Однако я хочу, чтобы он возвращал только те запросы, которые сопоставляются только с этим идентификатором кластера.
попробуйте поместить 'filter' пункт перед' п values' – Anentropic
работал как шарм. Пожалуйста, отправьте это как ответ, чтобы я мог его принять. :-) – Deathstroke