【问题标题】:default-value for ndb.StringProperty are not set at my App Engine-appndb.StringProperty 的默认值未在我的 App Engine-app 中设置
【发布时间】:2015-12-28 10:29:58
【问题描述】:

我将用户保存在 App Engine 的 NDB 中。有些值是必需的,但并不重要,所以如果不可用,我希望它们设置为默认值。 当我创建一个用户(primaryEmail="example@dom.com")时,默认值似乎是一个空字符串:

User(key=Key('User', 4523189241643008),familyName=u'', givenName=u'', primaryEmail=u'example@dom.com')

class User(ndb.Model):
  primaryEmail              = ndb.StringProperty(required=True)
  givenName                 = ndb.StringProperty(required=True, default='<name>')
  familyName                = ndb.StringProperty(required=True, default='<surname>')

为我应该知道的 StringProperties 设置默认值是否有一些限制?

【问题讨论】:

    标签: python google-app-engine properties google-cloud-datastore app-engine-ndb


    【解决方案1】:

    如果您提供空字符串作为参数,NDB 将存储它们。

    ..., familyName=u'', givenName=u'', ...
    

    如果不提供参数,则使用默认值。

    User(key=Key('User', 4523189241643008), primaryEmail=u'example@dom.com')
    

    注意:这也意味着您不能将这些字段设为必填:

    class User(ndb.Model):
      primaryEmail              = ndb.StringProperty(required=True)
      givenName                 = ndb.StringProperty(default='<name>')
      familyName                = ndb.StringProperty(default='<surname>')
    

    【讨论】:

    • 它应该是这样工作的,但我的经验是不同的。我确定我只设置了primaryEmail。
    • 如果我删除默认值,我会得到:BadValueError: Entity has uninitialized properties: givenName, familyName
    • 我更新了我的答案,并附上了删除 required=true 参数的注释
    • 删除所需的更改对我来说没有任何影响。
    【解决方案2】:

    原来是“<...>”字符导致了问题。

    【讨论】:

    • 什么?他们是如何造成问题的?这让我很惊讶。
    猜你喜欢
    • 2016-09-25
    • 2012-01-23
    • 1970-01-01
    • 2022-12-04
    • 1970-01-01
    • 2018-02-12
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    相关资源
    最近更新 更多