簡而言之,就是__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來處理字符串對象的轉換。