获得“期望的字符串,没有了”错误的Model.get_by_id()

问题描述 投票:3回答:1

当运行此代码,使用相同的SITE_ID:

int_id= int(self.request.get("site_id"))
site_draft = SiteDraft.get_by_id(int_id)

我得到这个错误:

INFO     2016-06-27 12:39:19,040 module.py:788] minisites: "GET /edit/5891733057437696 HTTP/1.1" 500 -
    return self.handle_exception(e, self.app.debug)
  File "C:\Program Files\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\lib\webapp2-2.3\webapp2.py", line 545, in dispatch
    return method(*args, **kwargs)
  File "C:\Users\Yuri\Documents\WiseStamp\Server\minisites\web\pages\edit_site.py", line 21, in get
    self.post(args)
  File "C:\Users\Yuri\Documents\WiseStamp\Server\minisites\web\pages\edit_site.py", line 44, in post
    site_draft = SiteDraft.get_by_id(int_id)
  File "C:\Program Files\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\ext\ndb\utils.py", line 160, in positional_wrapper
    return wrapped(*args, **kwds)
  File "C:\Program Files\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\ext\ndb\model.py", line 3602, in _get_by_id
    return cls._get_by_id_async(id, parent=parent, **ctx_options).get_result()
  File "C:\Program Files\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\ext\ndb\tasklets.py", line 378, in get_result
    self.check_success()
  File "C:\Program Files\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\ext\ndb\tasklets.py", line 425, in _help_tasklet_along
    value = gen.send(val)
  File "C:\Program Files\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\ext\ndb\context.py", line 765, in get
    pbs = entity._to_pb(set_key=False).SerializePartialToString()
  File "C:\Program Files\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\ext\ndb\model.py", line 3167, in _to_pb
    prop._serialize(self, pb, projection=self._projection)
  File "C:\Program Files\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\ext\ndb\model.py", line 1422, in _serialize
    values = self._get_base_value_unwrapped_as_list(entity)
  File "C:\Program Files\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\ext\ndb\model.py", line 1192, in _get_base_value_unwrapped_as_list
    wrapped = self._get_base_value(entity)
  File "C:\Program Files\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\ext\ndb\model.py", line 1180, in _get_base_value
    return self._apply_to_values(entity, self._opt_call_to_base_type)
  File "C:\Program Files\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\ext\ndb\model.py", line 1352, in _apply_to_values
    value[:] = map(function, value)
  File "C:\Program Files\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\ext\ndb\model.py", line 1234, in _opt_call_to_base_type
    value = _BaseValue(self._call_to_base_type(value))
  File "C:\Program Files\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\ext\ndb\model.py", line 1255, in _call_to_base_type
    return call(value)
  File "C:\Program Files\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\ext\ndb\model.py", line 1331, in call
    newvalue = method(self, value)
  File "C:\Program Files\Google\Cloud SDK\google-cloud-sdk\platform\google_appengine\google\appengine\ext\ndb\model.py", line 1781, in _validate
    (value,))
BadValueError: Expected string, got None

它曾经在一天前的工作,但现在它的作品只有20%的时间(这也是奇怪的 - 这似乎是工作一些时间)。什么是更加古怪的是我提供int作为site_id,但它告诉我它得到None

请指教。

python google-app-engine google-cloud-datastore
1个回答
5
投票

就像要求的一样

纵观详细的堆栈跟踪,注重执行的操作,

我们看

 _get_by_id
 get_result
 _help_tasklet_al
 get
 _to_pb
 _serialize
 _get_base_value
_get_base_value
_apply_to_values
_opt_call_to_base
_call_to_base_type
call
_validate


BadValueError: Expected string, got None

我们看到,执行的路径是内部_get_by_id,它正在处理get_result。因此,一个实体被检索。进一步向下看,我们看到的代码实际上是在验证值检索并在_validate通话与BadValueError失败:预计串,得到无

怎样才能获得在现有实体错误值。通常,它是为改变模型的结果,你要么

  • 添加新的必要属性,而不是更新现有实体,
  • 改变现有的属性的类型
  • 增加了一个验证器的属性,而不是由现有的实体标准。

当您更改模型必须考虑实体转移是很重要的。

干杯

Ť

© www.soinside.com 2019 - 2024. All rights reserved.