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