【发布时间】:2012-07-10 02:24:35
【问题描述】:
GAE db.Model 无法存储元组列表。因此,当我将列表从实体中拉出时,我需要将列表保存为 json.dumps 字符串和 json.loads 字符串。我想自动化这个。这是我的尝试:
class example(db.Model):
someAttr = db.StringListProperty()
A = db.StringProperty()
B = db.StringProperty()
C = db.StringProperty()
def __setattr__(self, name, value):
#convert json to string for storage
if name in ("A", "B", "C"):
value = json.dumps(value)
#call default set method
return super(Quote, self).__setattr__(name, value)
def __getattribute__(self, name):
#convert string to json for retrieval
if name in ("A", "B", "C"):
val = super(Quote, self).__getattribute__(name)
return json.loads(val)
else:
# default get behavior
return super(Quote, self).__getattribute__(name)
当我尝试设置我得到的实体的 A、B、C 属性时:
BadValueError: Property C must be a str or unicode instance, not a list
【问题讨论】:
-
有什么理由不将整个列表粘贴到 blob 属性中。这将是一个更简单的练习。
-
覆盖模型的 getattr/setattr 不是这样做的方法 - 这是自定义属性类的用途。或者,按照 Sologoub 的建议,使用已经有 NDB 的 NDB。
标签: python google-app-engine google-cloud-datastore python-2.7