【问题标题】:Django subquery problem "Subquery returns more than 1 row"Django 子查询问题“子查询返回多于 1 行”
【发布时间】:2011-08-30 15:20:14
【问题描述】:

我有三个相关的模型,比如

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 中完成这个查询吗?

谢谢

【问题讨论】:

    标签: mysql django-models mysql-error-1242


    【解决方案1】:

    我不知道你为什么这样做会使事情复杂化。您可以通过以下方式摆脱困境:

    对于模型City的给定实例city,您可以通过这种方式获取所有Districts

    District.objects.filter(county__city=city)

    您可能需要阅读名为 Lookups that span relationships 的 Django 文档的这一部分,因为它解释了如何实现类似的查找查询。

    【讨论】:

    • 非常感谢您的帮助!我一定会仔细阅读该文档。
    猜你喜欢
    • 1970-01-01
    • 2014-02-15
    • 1970-01-01
    • 2017-05-29
    • 1970-01-01
    • 2013-08-18
    • 2018-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多