1

我正在 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 文档,我没有看到任何有用的信息。如何检查实例是否有对应的数据存储记录?

4

1 回答 1

2

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

{% if group_inst.has_key %}
于 2013-01-27T20:43:24.933 回答