我正在 Google App Engine 中编写一个 Django 页面,用户可以在其中创建或编辑对象的实例并保存它。因为创建新对象和编辑现有对象的代码(几乎)相同,所以我使用相同的代码进行编辑和创建。该对象称为组。
在视图函数的顶部,如果提供了 id,我会加载 Group 实例,如果没有提供 id,我会创建一个新实例:
def group_edit(request, group_id=None):
if(group_id is None):
group_inst = Group()
else:
group_inst = db.get(db.Key.from_path('Group', int(group_id)))
if(group_inst is None):
raise Http404()
然后视图函数的其余部分在 group_inst 上运行,而不知道或关心 group_inst 是新实例还是现有实例。但是,有一个地方我需要知道区别:页面标题。如果用户正在创建一个新组,我想显示“创建组”,否则我想显示“编辑组 - {{ group.name }}”
直观地说,如果对象的键为 None,我将只签入模板:
<h1>
{% if group_inst.key %}
Edit Group - {{ group_inst.name }}
{% else %}
Create Group
{% endif %}
</h1>
但是,这会引发 NotSavedError。浏览 GAE 文档,我没有看到任何有用的信息。如何检查实例是否有对应的数据存储记录?