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

它们如何从类属性转换为实例属性?我把类属性弄错了吗?


问题答案:

看看Modeldjango / db / models.py下的类。那里的类​​属性通过类似的东西变成实例属性

setattr(self, field.attname, val)

可能会建议使用整个文件(ModelBaseModel类)作为元类的优秀动手示例。