为所有查询选择相关

使用 ForeignKey 的模型

我们将使用这些模型:

from django.db import 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()

但这不是干。

定制经理

class BookManager(models.Manager):

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

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

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

现在我们必须在视图中使用的是

books = Book.objects.all()

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