看django操作数据库的时候 有写
def __unicode__(self)
这么写的作用是什么啊?
谢邀
其实楼上@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 models
class 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...
3 回答3.2k 阅读✓ 已解决
2 回答2k 阅读✓ 已解决
2 回答1.3k 阅读✓ 已解决
2 回答1.8k 阅读✓ 已解决
3 回答1.8k 阅读
1 回答1.5k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
这个__str__的作用是美化打印出来的结果,使人类更方便查看。看下面例子,如果没有__st__方法,打印的结果是<__main__.Test object at 0x0000022D6D1387B8>格式,有了__str__方法后,打印时会按照__str__定义的格式来打印,打印结果为Name:xiaoming。
在Django中,如果用的是Python3的话就只能用__str__方法,如果是Python2的话就使用__unicode__方法。因为更安全一些。看看文档