Проблема подзапроса Django "Подзапрос возвращает более 1 строки" - PullRequest
2 голосов
/ 22 мая 2011

У меня есть три похожие модели, такие как

class City(models.Model):
    name = models.CharField(max_length=200, blank=False)
    country = models.ForeignKey(Country,unique=False,null=False)

    def __unicode__(self):
        return self.name

    class Meta:
        ordering = ['name']        

class County(models.Model):
    name = models.CharField(max_length=500, blank=False)
    city = models.ForeignKey(City,unique=False,null=False)

    def __unicode__(self):
        return self.name

    class Meta:
        ordering = ['name']

class District(models.Model):
    name = models.CharField(max_length=500, blank=False)
    county = models.ForeignKey(County,unique=False,null=False)

    def __unicode__(self):
        return self.name

    class Meta:
        ordering = ['name']  

То, что я хотел бы сделать, это получить все Districts для указанного города. Я попробовал:

District.objects.all().filter(county = County.objects.all().filter(city=City.objects.filter(id=4)))

Однако выдает ошибку типа OperationalError: (1242, 'Subquery returns more than 1 row')

Можете ли вы дать мне представление о том, как я могу выполнить этот запрос в django?

Спасибо

1 Ответ

1 голос
/ 22 мая 2011

Я не уверен, почему вы усложняете вещи, делая их таким образом.Вы можете получить что-то вроде:

Для данного экземпляра city модели City, вы можете получить все Districts следующим образом:

District.objects.filter(county__city=city)

Возможно, вы захотите пройти этот раздел в документации Django, которая называется Поиски, которые охватывают отношения , так как в ней объясняется, как можно выполнить аналогичные поисковые запросы.

...