管理中显示的对象类型而不是 def __unicode__ 中的特定值
Posted
技术标签:
【中文标题】管理中显示的对象类型而不是 def __unicode__ 中的特定值【英文标题】:Object type instead of specific value from def __unicode__ showed in admin 【发布时间】:2015-07-06 21:52:51 【问题描述】:根据link1和link2,我制作了在另一个模型中列为kierunek = models.ForeignKey('Kierunek', default=1)
的模型,并作为选择的名称显示self.nazwa_kierunku
。一切正常,但我无法得到def __unicode__
的工作。我也试过def __str__
。总是有“Object Kierunek”这个名字。
我的一个代码示例。我尝试了很多变体:
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"
【问题讨论】:
Python 3中没有unicode
类型,所以没有__unicode__
魔术方法。
【参考方案1】:
假设您使用的是 pyhton 3
__str__() and __unicode__() methods
在 Python 2 中,对象模型指定 str() 和 unicode() 方法。如果这些方法存在,它们必须返回 str(字节)和 分别为 unicode(文本)。
print语句和str内置调用str()来确定 对象的人类可读表示。内置的 unicode 如果存在则调用 unicode(),否则回退到 str() 并使用系统编码对结果进行解码。相反,Model 基类自动派生 str() 从 unicode() 通过编码为 UTF-8。
在 Python 3 中,只有 str(),它必须返回 str(文本)。
(也可以定义bytes(),但是Django应用 这种方法用处不大,因为他们几乎从不处理 字节。)
Django 提供了一种简单的方法来定义 str() 和 unicode() 适用于 Python 2 和 3 的方法:您必须定义一个 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() 必须在所有版本的 蟒蛇。
来源https://docs.djangoproject.com/en/1.8/topics/python3/#str-and-unicode-methods
【讨论】:
以上是关于管理中显示的对象类型而不是 def __unicode__ 中的特定值的主要内容,如果未能解决你的问题,请参考以下文章