from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class MyClass(object):
def __str__(self):
return "Instance of my class"
class UserProfile(models.Model):
user = models.OneToOneField(User, unique=True, verbose_name=_('user'), related_name='profile')
city = models.CharField(max_length=128, null=True, blank=True)
5条答案
按热度按时间qyzbxkaa1#
我认为
__unicode__()
方法不正确,您应该使用__str__()
方法。对于
Python 2.x
,__str__()
方法将返回str(字节),__unicode__()
方法将返回unicode(文本)。print语句和str内置函数调用
__str__()
来确定对象的人类可读表示。unicode内置函数调用__unicode__()
(如果存在),否则福尔斯__str__()
并使用系统编码解码结果。相反,Model基类通过编码为UTF-8自动从__unicode__()
派生__str__()
。阅读此处完成但是在
Python 3.x
中只有__str__()
,没有__unicode__()
方法。Django提供了一种简单的方法来定义
__str__()
和__unicode__()
方法,这些方法可以在Python 2和3上工作:你必须定义一个__str__()
方法来返回文本并应用python_2_unicode_compatible()装饰器。在Python 3中,装饰器是无操作的,而在Python 2中,它定义了适当的
__unicode__()
和__str__()
方法(替换了进程中原始的__str__()
方法)。下面是django docs的一个例子。
**解决方案:**用同样的方法装饰你的类,在
models.py
中,添加一个将被添加到用户模型中的方法。3npbholx2#
Django表单中的
ForeignKeys
由ModelChoiceFields
表示。ModelChoiceField
类有一个label_from_instance
方法,它决定了如何呈现选项。因此,为了在Admin中更改此表示,您需要修改此表单字段。下面是一个简单的例子。
vuktfyat3#
你可以通过重写User
__unicode__
方法来改变Django默认用户的字符串表示。将下面的代码添加到你的应用中,可能是models.pyutugiqy64#
假设您有一个类似的模型
如果您想在管理页面显示用户的电子邮件,而不是用户名或用户ID,那么您可以执行以下操作
eqzww0vc5#
我也遇到了同样的问题,我不得不将@Todor的解决方案扩展到许多型号和不同的应用程序。
最后,最好覆盖默认的AdminSite并挂钩register以定制User表单字段。
那么就不需要修改每个
ModelAdmin
了。