既然是调用类属性为什么要用shelf呢?

来源:7-3 课程机构列表页数据展示1

赵日天l

2017-10-19

class CityDict(models.Model):
   name = models.CharField(max_length=20, verbose_name=u"城市")
   desc = models.CharField(max_length=200, verbose_name=u'描述')
   add_time = models.DateTimeField(default=datetime.now, verbose_name=u'添加时间')

   class Meta:
       verbose_name = u'城市'
       verbose_name_plural = verbose_name

   def __unicode__(self):
       return self.name

改成这样写可以吗

 class CityDict(models.Model):
   name = models.CharField(max_length=20, verbose_name=u"城市")
   desc = models.CharField(max_length=200, verbose_name=u'描述')
   add_time = models.DateTimeField(default=datetime.now, verbose_name=u'添加时间')

   class Meta:
       verbose_name = u'城市'
       verbose_name_plural = verbose_name

   def __unicode__(cls):
       return cls.name 


写回答

2回答

Jaxon

2017-10-19

因为是调用对象本身的属性

0
3
赵日天l
非常感谢!
2017-10-20
共3条回复

bobby

2017-10-20

首先, 这个问题很好, 这个是python的面向对象知识了,首先

    1. 类中定义的__unicode__方法一定是会被对象调用而不是被类调用,所以不管你的参数是cls还是self,这两个都是变量名而已, 实际传递进去的都是对象

    2. 对象调用.name涉及到python中属性的查找顺序, 会首先查找对象的name熟悉,如果没有才会去查到类的name值, 这里你能看到类的name值是一个CharField对象而不是具体的值, 实际上model的实例在你取到值的时候已经把name的值放到了实例对象中所以会优先获取到对象的值而不是类

    

0
0

Python3.6+django+xadmin,打造在线教育平台

【毕设】Python 2.7到3.6 完美适配,Django升级2.0

3677 学习 · 4038 问题

查看课程