添加模型的字符串表示形式
要创建模型对象的人类可读表示,你需要实现 Model.__str__() 方法(或 python2 上的 Model.__unicode__())。只要在模型的实例上调用 str()(包括,例如,在模板中使用模型时),就会调用此方法。这是一个例子:
-
创建一个书模型。
# your_app/models.py from django.db import models class Book(models.Model): name = models.CharField(max_length=50) author = models.CharField(max_length=50) -
创建模型的实例,并将其保存在数据库中:
>>> himu_book = Book(name='Himu Mama', author='Humayun Ahmed') >>> himu_book.save() -
在实例上执行
print():>>> print(himu_book) <Book: Book object>
<Book:Book object> ,默认输出,对我们没有帮助。要解决这个问题,让我们添加一个 __str__ 方法。
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Book(models.Model):
name = models.CharField(max_length=50)
author = models.CharField(max_length=50)
def __str__(self):
return '{} by {}'.format(self.name, self.author)
请注意,只有当你希望代码与 python 2 兼容时才需要 python_2_unicode_compatible 装饰器。此装饰器复制 __str__ 方法以创建 __unicode__ 方法。从 django.utils.encoding 导入它。
现在,如果我们再次调用 print 函数:
>>> print(himu_book)
Himu Mama by Humayun Ahmed
好多了!
当模板在 ModelForm 中用于 ForeignKeyField 和 ManyToManyField 字段时,也使用字符串表示。