Django模型和Python类属性
问题内容:
django网站上的教程显示了这些模型的代码:
from django.db import models
class Poll(models.Model):
question = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
class Choice(models.Model):
poll = models.ForeignKey(Poll)
choice = models.CharField(max_length=200)
votes = models.IntegerField()
现在,每个属性都是一个类属性,对吗?因此,该类的所有实例都应共享相同的属性。稍后,他们展示了这段代码:
class Poll(models.Model):
# ...
def __unicode__(self):
return self.question
class Choice(models.Model):
# ...
def __unicode__(self):
return self.choice
它们如何从类属性转换为实例属性?我把类属性弄错了吗?
问题答案:
看看Model
django / db / models.py下的类。那里的类属性通过类似的东西变成实例属性
setattr(self, field.attname, val)
可能会建议使用整个文件(ModelBase
和Model
类)作为元类的优秀动手示例。