1

Djangoフォームを使用してGAEで既存のオブジェクトを編集するデータフローが実際にはわかりません。ユーザーがリンクをクリックします<li><a id="entry" href="edit/{{ entry.title|urlencode }}">edit</a></li>。このtitle情報を使用して、オブジェクトのインスタンスを作成し、フォームにデータを入力します。(特定のビューで) 返されたデータからインスタンスを取得するにはどうすればよいですか? 往復しなきゃいけないの!?

class EditEntry(webapp.RequestHandler):

def get(self, entry_title):
    entry_title = urllib.unquote(entry_title.encode('ascii')).decode('utf-8')

    entry_get = Entry.all().filter("title =", entry_title).get()
    cats = db.Query(Category)
    e_form = EntryForm(instance=entry_get)        
    template_values = {
        'entry_get':entry_get,                           
        'cats':cats,
        'e_form': e_form,
        }    
    path = os.path.join(os.path.dirname(__file__), 'editor.html')
    self.response.out.write(template.render(path, template_values))
4

1 に答える 1

1

誰かが不思議に思ったら。私の場合、インスタンス識別子を前後に渡す必要があります。より正確には、文字列として変換できるキーです。

文字列でエンコードされたキーを Key オブジェクトに変換するために、アプリケーションは文字列を Key コンストラクターに渡します。

entry_get = Entry.all().filter("title =", entry_title).get()

テンプレートに渡すには、キー コンストラクターを直接使用できます。

template_values = {
'entry_get':entry_get.key(),
...

または通常のオブジェクトのように

template_values = {
'entry_get':entry_get,
...

2 番目のオプションを使用する場合は、テンプレート言語フィルターを使用してテンプレート内のキーを取得できます{{ entry_get.key }}。キーを使用して URL を作成する:

<form action="/new/{{ entry_get }}" method="post">
...

そして、keyコンストラクターを使用してキー オブジェクトに変換します。

def post(self, key_name):
    key_name = urllib.unquote(key_name.encode('ascii')).decode('utf-8')
    entry_obj = db.get(db.Key(key_name))
    ...
于 2013-03-18T11:01:29.450 に答える