如何检查数据存储区中是否存在给定实体?

时间:2013-01-27 20:29:52

标签: python django google-app-engine

我正在Google App Engine中编写一个Django页面,用户可以在其中创建或编辑对象的实例并进行保存。因为创建新对象和编辑现有对象的代码(几乎)相同,所以我使用相同的代码进行编辑和创建。该对象称为Group。

在视图函数的顶部,如果提供了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文档查看我没有看到任何有用的信息。如何检查实例是否具有相应的数据存储记录?

1 个答案:

答案 0 :(得分:2)

您应该使用has_key()而不是仅使用密钥:

{% if group_inst.has_key %}