關於django模型裡面的__str__和__unicode
簡而言之,就是__str__和__unicode__都是為了再管理站點中載入這個表時想顯示什麼屬性,當然一般都是顯示一個name,大體來講是通用的。下面是抄的csdn上面的一篇文章。
str()是Python的一個“魔幻”方法,這個方法定義了當object呼叫str()時應該返回的值。Django在許多地方使用str(obj)(或者相關方法,unicode(obj)——見下文),比如說在Django管理站點載入一個物件時顯示它的值或者作為物件的顯示值插入模板中。因此,我們應該總是返回一個友好的,使用者可讀的字串作為物件的str。儘管這不是必須的,但還是建議這麼做。例如:
class Person(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
def __str__(self):
# Note use of django.utils.encoding.smart_str() here because
# first_name and last_name will be unicode strings.
return smart_str('%s %s' % (self.first_name, self.last_name)
unicode()方法是在一個物件上呼叫unicode()時被呼叫的。因為Django的資料庫後端會返回Unicode字串給model屬性,所以我們通常會給自己的model寫一個unicode()方法。前面的例子也可以更簡單地寫成:
class Person(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
def __unicode__(self):
return u'%s %s' % (self.first_name, self.last_name)
如果定義了unicode()方法但是沒有定義str()方法,Django會自動提供一個str()方法呼叫unicode()方法,然後把結果轉換為UTF-8編碼的字串物件。在實際開發中,建議:只定義unicode()方法,需要的話讓Django來處理字串物件的轉換。