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)
假设我在 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)