【问题标题】:How to create random default value in ndb model in GAE?如何在 GAE 的 ndb 模型中创建随机默认值?
【发布时间】:2016-10-18 07:06:32
【问题描述】:

我有一个 ndb 模型

import os
class ProblemInvite(ndb.Model):
    email = nab.StringProperty(required=True)
    token = ndb.StringProperty(required=True, default=os.urandom(16).encode('hex'))

当我创建模型列表时,令牌是相同的:

import logging
for email in emails:
    problem_invite = ProblemInvite(email=email_address)
    logging.exception(problem_invite.token)

奇怪的是,每封邮件的邀请令牌都是一样的,这是怎么回事?谢谢。

【问题讨论】:

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


    【解决方案1】:

    数据存储区中的属性类型一次只能有一个默认值。来自Property Options 表:

    所以你的os.urandom(16).encode('hex') 表达式只计算一次。我不能 100% 确定什么时候,但我怀疑它会在应用程序部署时 - 上传数据存储模型时。

    要解决此问题,只需在创建实体时删除默认值并明确指定属性值。

    旁注:在 ndb 模型中使用默认值时,您需要格外小心更改这些默认值作为行为(即为受影响的属性返回的数据) 可能会更改在应用部署/更新时已存在于数据存储区中的实体。

    【讨论】:

    • 感谢您的回答。有道理。
    猜你喜欢
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多