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

1 投票
1 回答
707 浏览
提问于 2025-04-17 13:51

我正在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 %}

撰写回答