Django 所有查询的select_related

例子

外键模型

我们将使用以下模型:

fromdjango.dbimport models

class Book(models.Model):
 name= models.CharField(max_length=50)
 author = models.ForeignKey(Author)

class Author(models.Model):
 name = models.CharField(max_length=50)

假设我们经常(总是)访问 book.author.name

视野中

每次我们可以使用以下内容

books = Book.objects.select_related('author').all()

但这不是DRY。

客户经理

class BookManager(models.Manager):

    def get_queryset(self):
        qs = super().get_queryset()
        return qs.select_related('author')

class Book(models.Model):
    ...
    objects = BookManager()

注意:super必须更改对python 2.x的调用

现在我们需要在视图中使用的是

books = Book.objects.all()

并且不会在模板/视图中进行其他查询。