既然是调用类属性为什么要用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回答
-
因为是调用对象本身的属性
032017-10-20 -
bobby
2017-10-20
首先, 这个问题很好, 这个是python的面向对象知识了,首先
1. 类中定义的__unicode__方法一定是会被对象调用而不是被类调用,所以不管你的参数是cls还是self,这两个都是变量名而已, 实际传递进去的都是对象
2. 对象调用.name涉及到python中属性的查找顺序, 会首先查找对象的name熟悉,如果没有才会去查到类的name值, 这里你能看到类的name值是一个CharField对象而不是具体的值, 实际上model的实例在你取到值的时候已经把name的值放到了实例对象中所以会优先获取到对象的值而不是类
00
相似问题