我正在尝试为我的一个模型编写一个__init__
函数,这样我就可以通过执行以下操作来创建对象:
p = User('name','email')
当我写模型的时候,我有:
def __init__(self, name, email, house_id, password):
models.Model.__init__(self)
self.name = name
self.email = email
这很有效,我可以将对象保存到数据库中,但是当我执行User.objects.all()
时,除非我取出我的__init__
函数,否则它不会拉出任何内容。有什么想法吗?
发布于 2009-05-09 17:55:48
依靠Django的内置功能并传递命名参数将是最简单的方法。
p = User(name="Fred", email="fred@example.com")
但是如果你想节省一些击键,我建议你给这个类添加一个静态的方便方法,而不是弄乱初始化器。
# In User class declaration
@classmethod
def create(cls, name, email):
return cls(name=name, email=email)
# Use it
p = User.create("Fred", "fred@example.com")
发布于 2009-05-09 17:10:34
Django希望模型构造函数的签名是(self, *args, **kwargs)
,或者是一些合理的传真。您将签名更改为完全不兼容的内容已将其破坏。
发布于 2015-01-29 23:45:05
正确的答案是避免覆盖__init__
,并按照Django docs中的描述编写一个类方法。
但这可以像您正在尝试的那样完成,您只需要添加被__init__
接受的*args, **kwargs
,并将它们传递给超级方法调用。
def __init__(self, name, email, house_id, password, *args, **kwargs):
super(models.Model, self).__init__(self, *args, **kwargs)
self.name = name
self.email = email
https://stackoverflow.com/questions/843580
复制相似问题