Python Google应用程序引擎-错误:模型构造函数不接受位置参数

Python Google应用程序引擎-错误:模型构造函数不接受位置参数,python,google-app-engine,Python,Google App Engine,我使用以下代码尝试创建具有默认值的消息: MESSAGE_STORE = "messages" def get_message_key(key_name=MESSAGE_STORE): return ndb.Key("Message", key_name) def save_message(msg): message = Message(parent=get_message_key(MESSAGE_STORE), message=msg) message.put() clas

我使用以下代码尝试创建具有默认值的消息:

MESSAGE_STORE = "messages"
def get_message_key(key_name=MESSAGE_STORE):
    return ndb.Key("Message", key_name)

def save_message(msg):
  message = Message(parent=get_message_key(MESSAGE_STORE), message=msg)
  message.put()

class Message(ndb.Model):
    message = ndb.StringProperty(indexed=False)
    def __init__(self, *args, **kwargs):
      super(Message, self).__init__(self)
      self.message = kwargs.get('message', 'No Message')
不过,我每次都会出错。我怎样才能正确地调用它,如果我没有构造函数并使用以下方法调用它,它就可以正常工作:

message = Message(parent=get_message_key(MESSAGE_STORE))
message.message = "Test Message"

错误是怎么回事?

您不应该像这样重写\uuuu init\uuuu,您很可能会遇到问题。Model大量使用元类,重写init几乎没有价值,尤其是在这种情况下

如果需要默认值,请按如下所示定义模型

class Message(ndb.Model):
    message = ndb.StringProperty(indexed=False, default="No Message")

作为一个旁观者,你应该考虑将两个函数分类为类方法,这样你就不记得每次想获取和保存消息时都要导入函数。这样,您只需导入模型,然后使用
Message.save_Message
等即可。

好的,任何人都需要了解*和**参数。本页帮助:

考虑到这一点,这似乎可以正常工作:

MESSAGE_STORE = "messages"
def get_message_key(key_name=MESSAGE_STORE):
    return ndb.Key("Message", key_name)

def save_message(msg):
  message = Message(parent=get_message_key(MESSAGE_STORE), message=msg)
  message.put()

class Message(ndb.Model):
    message = ndb.StringProperty(indexed=False)
    def __init__(self, **kwargs):
      super(Message, self).__init__(**kwargs)
      self.message = kwargs.get('message', 'No Message')

您没有将args和kwargs传递给super调用。@DanielRoseman作为答案而不是注释不是更好吗?我面临这个问题是因为,我的模型名和视图类名是相同的。我必须问一下,为什么您甚至试图以这种方式设置实体的默认值。您需要创建更多的代码,这会使ndb.Model和properties的一些非常简单和固有的功能变得过于复杂。