添加模型的字符串表示形式
要创建模型对象的人类可读表示,你需要实现 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
字段时,也使用字符串表示。