首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >编写要在django模型中使用的__init__函数

编写要在django模型中使用的__init__函数
EN

Stack Overflow用户
提问于 2009-05-09 16:23:36
回答 4查看 77.9K关注 0票数 76

我正在尝试为我的一个模型编写一个__init__函数,这样我就可以通过执行以下操作来创建对象:

代码语言:javascript
复制
p = User('name','email')

当我写模型的时候,我有:

代码语言:javascript
复制
def __init__(self, name, email, house_id, password):
    models.Model.__init__(self)
    self.name = name
    self.email = email

这很有效,我可以将对象保存到数据库中,但是当我执行User.objects.all()时,除非我取出我的__init__函数,否则它不会拉出任何内容。有什么想法吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-05-09 17:55:48

依靠Django的内置功能并传递命名参数将是最简单的方法。

代码语言:javascript
复制
p = User(name="Fred", email="fred@example.com")

但是如果你想节省一些击键,我建议你给这个类添加一个静态的方便方法,而不是弄乱初始化器。

代码语言:javascript
复制
# 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")
票数 114
EN

Stack Overflow用户

发布于 2009-05-09 17:10:34

Django希望模型构造函数的签名是(self, *args, **kwargs),或者是一些合理的传真。您将签名更改为完全不兼容的内容已将其破坏。

票数 49
EN

Stack Overflow用户

发布于 2015-01-29 23:45:05

正确的答案是避免覆盖__init__,并按照Django docs中的描述编写一个类方法。

但这可以像您正在尝试的那样完成,您只需要添加被__init__接受的*args, **kwargs,并将它们传递给超级方法调用。

代码语言:javascript
复制
def __init__(self, name, email, house_id, password, *args, **kwargs):
        super(models.Model, self).__init__(self, *args, **kwargs)
        self.name = name
        self.email = email
票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/843580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档