添加模型的字符串表示形式

要创建模型对象的人类可读表示,你需要实现 Model.__str__() 方法(或 python2 上的 Model.__unicode__())。只要在模型的实例上调用 str()(包括,例如,在模板中使用模型时),就会调用此方法。这是一个例子:

  1. 创建一个书模型。

    # 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)
    
  2. 创建模型的实例,并将其保存在数据库中:

    >>> himu_book = Book(name='Himu Mama', author='Humayun Ahmed')
    >>> himu_book.save()
    
  3. 在实例上执行 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 中用于 ForeignKeyFieldManyToManyField 字段时,也使用字符串表示。