Django中多个对象的访问模型方法

Access Model Method for Multiple Objects in Django

假设我在 Django 中创建了一个如下所示的模型:

class Book(models.Model):
    author = models.CharField(max_length=64)
    ... (other attributes)

    def author_pretty(self):
        return "[··" + self.author +  "··]"

我需要从数据库中的 所有 个对象获取方法 author_pretty,目前我正在这样做:

authors = Book.objects.values_list('author', flat=True)
authors_pretty = ["[·" + author +  "·]" for author in authors]
# or
books = Book.objects.all()
authors_pretty = [book.author_pretty() for book in books]

有没有办法在一次调用中做到这一点? Django 仍然需要查询 DB 并调用该方法,但也许我缺少一个更干净的解决方案。

要看你怎么用了,如果是在一个模板上一个一个的,把方法当成一个属性

@property
def author_pretty(self):
        return "[··" + self.author +  "··]"

但是,如果您想要更干净的东西并且出于某种原因您一次需要它们,请查看 Django Docs for Concat, Query Expressions 和 Annotate

from django.db.models.functions import Concat
from django.db.models import Value, CharField

Book.objects.all().annotate(author_pretty=Concat(Value(“[··”), “author”, Value(“··]”), output_field=CharField()))

然后你可以像 属性

一样在 for 循环中使用它
for author in authors:
    print(author.author_pretty)