新增模型的字串表示形式

要建立模型物件的人類可讀表示,你需要實現 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 欄位時,也使用字串表示。