2015-04-28 62 views
0

根據link1link2我製作的模型在另一個模型中列出爲kierunek = models.ForeignKey('Kierunek', default=1),並作爲select的名稱,顯示self.nazwa_kierunku。一切工作正常,但我不能得到def __unicode__作品。我也試過def __str__。總是有名爲「Object Kierunek」的名字。對象類型而不是def __unicode__中的特定值顯示在管理中

我的代碼示例之一。我嘗試許多這樣的變體:

from django.db import models 

class Kierunek(models.Model): 
    nazwa_kierunku = models.CharField('Nazwa kierunku', max_length=100) 
    created = models.DateTimeField('Timecreated', auto_now_add=True, null=True) 
    modified = models.DateTimeField('Timeupdated', auto_now=True, null=True) 
    def __unicode__(self): 
     return self.nazwa_kierunku 

class Meta: 
    verbose_name = "Nazwa kierunku" 
    verbose_name_plural = "Nazwy kierunkow" 
+1

沒有'在Python 3 unicode'類型,所以沒有'__unicode__'魔術方法。 – Eevee

回答

1

假設使用的是pyhton 3

__str__() and __unicode__() methods 

在Python 2,對象模型指定STR()和的unicode() 方法。如果這些方法存在,它們必須分別返回str(字節)和unicode(文本) 。

打印語句和str內置調用str()來確定 對象的人類可讀表示。如果它存在,則內聯調用unicode(),否則返回 str()並使用系統編碼對結果進行解碼。相反,Model基類自動通過編碼爲UTF-8從 unicode()中派生出str()。

在Python 3中,只有str(),它必須返回str(text)。

(也可以定義字節(),但Django應用 有這種方法用處不大,因爲他們幾乎沒有處理 字節)。

Django提供了一種簡單的方法來定義STR()和上Python 2和3的unicode工作() 方法:你必須定義一個STR()方法 返回文本和應用python_2_unicode_compatible() 裝飾。

在Python 3上,裝飾器是無操作的。上Python 2中,它定義 適當的unicode()和STR()方法(替換 原始STR()方法的過程中)。這裏有一個例子:

from __future__ import unicode_literals 
from django.utils.encoding import python_2_unicode_compatible 

@python_2_unicode_compatible 
class MyClass(object): 
    def __str__(self): 
     return "Instance of my class" 

此技術對於Django的移植理念的最佳匹配。

對於向前兼容性,此裝飾器自Django 開始提供1.4.2。

最後,請注意repr()必須在Python的所有版本 上返回str。

https://docs.djangoproject.com/en/1.8/topics/python3/#str-and-unicode-methods

相關問題