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,
...

如果您选择第二个选项,您可以使用模板语言过滤器检索模板中的密钥{{ 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 回答