我从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,所以任何帮助都会受到赞赏。
答案 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使用了一些类似的方法)