2013-03-15 62 views
1

我真的沒有得到用django表單編輯GAE中現有對象的數據流。用戶點擊鏈接<li><a id="entry" href="edit/{{ entry.title|urlencode }}">edit</a></li>。通過title信息,我創建了對象的一個​​實例並用數據填充表單。如何從返回的數據中檢索實例(在給定視圖中)?我必須來回傳遞它!?GAE:用Django窗體編輯現有對象:如何檢查實例?

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)) 

回答

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