python __unicode__这个的作用是什么啊?
看django操作数据库的时候 有写
def __unicode__(self)
这么写的作用是什么啊?
回答:
这个__str__的作用是美化打印出来的结果,使人类更方便查看。看下面例子,如果没有__st__方法,打印的结果是<__main__.Test object at 0x0000022D6D1387B8>格式,有了__str__方法后,打印时会按照__str__定义的格式来打印,打印结果为Name:xiaoming。
python">class Test: def __init__(self, name, job):
self.name = name
self.job = job
def __str__(self):
return 'Name:' + self.name
instance = Test('xiaoming', 'Teacher')
print(instance)
在Django中,如果用的是Python3的话就只能用__str__方法,如果是Python2的话就使用__unicode__方法。因为更安全一些。看看文档
回答:
谢邀
其实楼上@InjetLee 说的基本很到位了,具体到Django中,在 Models中定义这个__unicode__
(python3为__str__
)方法与否,最直接的感受就是你访问admin所看到的内容是否友好。
下面,举个栗子:
class Question(models.Model): question_text = models.CharField('question text', max_length=200)
pub_date = models.DateTimeField('date published')
class Meta:
verbose_name = 'question'
verbose_name_plural = verbose_name
ordering = ['-id']
def __str__(self):
return self.question_text
上面的models来自django官方教程,在上面的models中,我定义了一个名为Question的models,此时,访问django的后台admin,看到的内容是这样的
可以发现,Question看到的内容就是我们上面返回的self.question_text
(如果你返回的是其它数据,则看到结果的会不同),那么,如果此时将上述代码注释掉,也就是变成下面这样,会发生什么呢?
class Question(models.Model): question_text = models.CharField('question text', max_length=200)
pub_date = models.DateTimeField('date published')
class Meta:
verbose_name = 'question'
verbose_name_plural = verbose_name
ordering = ['-id']
#
# def __str__(self):
# return self.question_text
此时,再去后台admin里面查看Question,则变成了这样:
你定义的问题,看到的内容全部变为了Question object
,这样的表示方式,对人来说,是相当的不友好的。
所以,以上,就是我所理解的__unicode__
的作用,希望对你有所帮助。
回答:
看这个 https://docs.djangoproject.co...
简单的说是Python2你使用unicode(对象)的时候 django自动调用的方法
Python3 使用 __str__
来个官方例子
from django.db import modelsclass Place(models.Model):
name = models.CharField(max_length=50)
address = models.CharField(max_length=80)
def __str__(self): # __unicode__ on Python 2
return "%s the place" % self.name
还可以参考这个链接 https://docs.python.org/3.3/h...
因为Python是用c实现的, 但是他有一些魔法方法暴露出来给对象重载用
你可以参考这个链接 http://pyzh.readthedocs.io/en...
以上是 python __unicode__这个的作用是什么啊? 的全部内容, 来源链接: utcz.com/a/160169.html