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

dim*_*rik 5 python sql django django-orm

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

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

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
Run Code Online (Sandbox Code Playgroud)

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

Iva*_*van 5

您可以创建一个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
Run Code Online (Sandbox Code Playgroud)