2011-05-22 2 views
2

У меня есть три взаимосвязанных модели, какДжанго проблемы подзапроса «подзапрос возвращает более чем на 1 строку»

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')

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

Благодаря

ответ

1

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

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

District.objects.filter(county__city=city)

Вы можете пройти через это раздел по документации Django под названием Lookups that span relationships, так как он объясняет, как вы можете получить похожие поисковые запросы.

+0

Большое вам спасибо за помощь! Я обязательно просмотрю эту документацию. – brsbilgic

Смежные вопросы