我试图通过自己开发一个网站来打破一些摇滚,我首先创建一些注册表页面并列出数据库记录。
我对__unicode__
方法不打印我的记录的用户名和__str__
的事实感到不满!
我知道使用__unicode__
是最佳做法,但我只能使用__str__
打印我的对象用户名。
有人可以解释为什么会这样吗?
我的模特:
from django.db import models
class User(models.Model):
username = models.CharField(max_length=200)
reg_date = models.DateTimeField('registry date')
def __unicode__(self):
return self.username
我的admin.py:
from django.contrib import admin
from registo.models import User
admin.site.register(User)
我的__unicode__(self)
输出:
User
User object
我的__str__(self)
输出:
User
Teste
感谢你提前合作!
答案 0 :(得分:14)
看起来您使用的是Python3.x
,这里是relevant documentation on Str and Unicode methods
在Python 2中,对象模型指定
__str__()
和__unicode__()
方法。如果存在这些方法,则必须返回str(bytes)和 unicode(文本)。print语句和str()内置调用
__str__()
来确定 对象的人类可读表示。内置的unicode() 如果它存在,则调用__unicode__()
,否则返回__str__()
并使用系统编码对结果进行解码。相反,Model基类自动从中派生__str__()
__unicode__()
编码为UTF-8。在Python 3中,只有
__str__()
,它必须返回str(文本)。
所以
在Python 3上,装饰器是一个无操作器。在Python 2上,它定义了 适当的
__unicode__()
和__str__()
方法(替换 过程中的原始__str__()
方法)。
答案 1 :(得分:2)
如果它不是python 3的东西,你发布的代码有不正确的缩进 - 不确定是否复制/粘贴错误或者它是如何在代码中。但是你的User
模型的方法需要缩进,如下所示:
from django.db import models
class User(models.Model):
username = models.CharField(max_length=200)
reg_date = models.DateTimeField('registry date')
def __unicode__(self):
return self.username