14

我试图通过自己开发一个网站来打破僵局,我从创建一些注册表页面和列出数据库记录开始。

我对__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

我的管理员.py:

from django.contrib import admin
from registo.models import User

admin.site.register(User)

我的__unicode__(self)输出:

User
    User object

我的__str__(self)输出:

User
    Teste

提前感谢您的合作!

4

2 回答 2

21

看起来你正在使用Python3.x,这里是相关文档Str and Unicode methods

在 Python 2 中,对象模型指定__str__()__unicode__() 方法。如果这些方法存在,它们必须分别返回 str(字节)和 unicode(文本)。

__str__()用于确定对象的人类可读表示的print 语句和 str() 内置调用。__unicode__()如果存在,则 unicode() 内置调用,否则__str__()使用系统编码回退并解码结果。相反,Model 基类通过编码为 UTF-8自动派生__str__()自 。__unicode__()

在 Python 3 中,有 simple __str__(),它必须返回 str(文本)。

所以

在 Python 3 上,装饰器是无操作的。在 Python 2 上,它定义了适当的__unicode__()__str__()方法(替换过程中的原始__str__()方法)。

于 2013-08-12T14:45:34.510 回答
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
于 2013-08-12T14:48:47.953 回答