为什么不必在Django模型中初始化属性?

时间:2014-07-29 05:59:11

标签: python django

我从Django开始,我对这些模型的运作方式感到困惑。我搜索了一下,无法找到答案。在Python中创建类时,我们必须初始化对象属性,例如:

class Contact(Object):
    def __init__(self, name, number):
        self.name = name
        self.number = number

如果我们创建一个子类,例如,同事:

Class Coworker(Contact):
     def __init__(self, name, number, title):
         Contact.__init__(self, name, number)
         self.title = title

因此我们仍然从超类初始化属性是有道理的,但在Django中,为什么我们不进行任何初始化?我们继承了models.Model类:

class Poll(models.Model):
    question = models.CharField(max_length=200)

为什么我们在使用之前不必从Model初始化CharField?我希望我的问题不会过于神秘。就像我说的,我刚刚开始使用Django,所以任何帮助都会受到赞赏。

2 个答案:

答案 0 :(得分:2)

因为它们存储在数据库中。程序或管理器将使用正确的参数实例化模型,因此初始化程序公然覆盖它们是不合适的。

答案 1 :(得分:0)

def __init___(self, **kwargs):
    cls_ = type(self)
    for k in kwargs:
        if not hasattr(cls_, k):
            raise TypeError(
                "%r is an invalid keyword argument for %s" %
                (k, cls_.__name__))
        setattr(self, k, kwargs[k])

__init__中应该有一个通用的models.Model方法(这是SQLAlchemy的一个片段,但我相信Django使用了一些类似的方法)