如何检查给定实体是否存在于数据存储中?
我正在Google App Engine上写一个Django页面,用户可以创建或编辑一个对象的实例并保存它。因为创建新对象和编辑已有对象的代码几乎是一样的,所以我就用同一段代码来处理这两种情况。这个对象叫做Group。
在视图函数的开头,如果提供了一个id,我就加载这个Group实例;如果没有提供id,我就创建一个新的Group实例:
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,我想显示“创建组”;如果是编辑已有的Group,我想显示“编辑组 - {{ group.name }}”。
直观上,我会在模板中检查这个对象的键是否为None:
<h1>
{% if group_inst.key %}
Edit Group - {{ group_inst.name }}
{% else %}
Create Group
{% endif %}
</h1>
但是这样会引发一个NotSavedError错误。在查看GAE的文档时,我没有找到有用的信息。我该如何检查这个实例是否有对应的数据库记录呢?
1 个回答
2
你应该使用 has_key()
来检查一个键是否存在,而不是直接去访问这个键:
{% if group_inst.has_key %}