python - 如何在django模型中选择相关的,所以它不会产生很多子查询

标签 python sql django django-orm

我有很多模型以某种方式相互引用,例如:

港口指的是城市,而城市又指的是国家。然后在 django admin 中我想在 list_display 端口国家中显示:

class Country(models.Model):
    title = models.CharField()


class City(models.Model):
    title = models.CharField()

    country = models.ForeignKey(Country)


class Port(models.Model):
    city = models.ForeignKey(City)

    def __str__(self):
        return self.city.county.title

所以基本上对于每个端口,django 都会生成更多查询。我假设 select_related 在这种情况下会以某种方式帮助我,但如何在模型中正确使用它?

最佳答案

您可以创建一个 PortManager 类并覆盖 get_queryset 方法并在模型中引用它:

class PortManager(models.Manager):
    def get_queryset(self):
        return super(PortManager, self).get_queryset().select_related()


class Port(models.Model):
    city = models.ForeignKey(City)
    objects = PortManager()

    def __str__(self):
        return self.city.country.title

关于python - 如何在django模型中选择相关的,所以它不会产生很多子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41035786/

相关文章:

python - 神经网络训练后如何提取图像特征?

mysql - SELECT all 如果参数为 null 否则返回特定项目 laravel

mysql - 在mysql中获取每个子表的10个项目

mysql - 如何在不切割特定列的情况下对sql表进行分页

python - 在 Linux 远程机器上进行开发的最佳方式

python - pandas dataframe 选择 nan 索引

python - python中的条件计算

python - 使用 super 用户 Django 1.9、Python 3.5 的凭据测试登录

django-model-utils : does InheritanceManager work if the parent model/class is abstract?

Django 自递归 ManyToManyField 过滤查询