ユーザーがオブジェクトのインスタンスを作成または編集して保存できる 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 で動作します。ただし、違いを知る必要がある場所が 1 つあります。それは、ページ タイトルです。ユーザーが新しいグループを作成している場合は「グループの作成」を表示したい、それ以外の場合は「グループの編集 - {{ group.name }}」を表示したい
直感的に、オブジェクトのキーが None の場合、テンプレートをチェックインします。
<h1>
{% if group_inst.key %}
Edit Group - {{ group_inst.name }}
{% else %}
Create Group
{% endif %}
</h1>
ただし、これにより NotSavedError が発生します。GAE のドキュメントを調べても、役立つ情報は何もありません。インスタンスに対応するデータストア レコードがあるかどうかを確認するにはどうすればよいですか?