2013-10-08 52 views
0

以下是我的模型和視圖。我是App Engine的新手,我正嘗試創建一個與profiletitle的關係的新語言集。我已經閱讀了大量的帖子/文檔,並且找不到功能性視圖代碼的很好例子。Google應用引擎ReferenceProperty視圖不會發布/保存

models.py

class AddProfile(db.Model): 
    profiletitle = db.StringProperty(required=True) 


class AddLang(db.Model): 
    profile = db.ReferenceProperty(AddProfile, required=True) 
    language = db.StringListProperty() 
    date = db.DateTimeProperty(auto_now_add=True) 

views.py

class CreateLang(BaseHandler): 

    def post(self): 
     n = AddLang(
     profile = self.request.get('profile'), 
     language = self.request.get('language').split(', ')) 
     n.put() 
     return webapp2.redirect('/') 

    def get(self): 
     self.render_template('create.html', {}) 

更新view.py - 在數據存儲

class CreateLang(BaseHandler): 

    def post(self): 
     n = AddLang(
     profile = AddProfile.all().filter('profiletitle', self.request.get('profile')).get(), 
     language = self.request.get('language').split(', ')) 
     n.put() 
     return webapp2.redirect('/') 

    def get(self): 
     self.render_template('create.html', {}) 

create.html上

<!DOCTYPE html> 

<html> 
<body> 
<form action="" method="post"> 
    <div class="field-wrapper"> 

    <div class="field-label"> 
     <label for="id_profile">Profile</label>: 
    </div> 

    <div class="field-field"> 
     <input type="text" name="profile" id="id_profile" /> 

    </div> 

</div> 

    <div class="field-wrapper"> 

    <div class="field-label"> 
     <label for="id_language">Language</label>: 
    </div> 

    <div class="field-field"> 
     <input type="text" name="language" id="id_language" /> 

    </div> 

</div> 
    <br> 
    <input type="submit" value=submit /> 
</form> 
這個現在存儲數據

當我嘗試發佈/保存數據時收到以下錯誤。我相信這是由於我需要使用get調用在我的模板中選擇的profiletitle的特定ID而引起的。

注:我沒有使用表格py,我有一個簡單的html模板。如果您有任何問題或需要查看模板,請告知我們。感謝您的閱讀/幫助。

 ![datastore snip]:(http://imm.io/1hTVN) 

Error Message 
    if value is not None and not value.has_key(): 

AttributeError: 'unicode' object has no attribute 'has_key' 

回答

1

這將有助於準確顯示您在POST中發送的內容。但是,假設你發送一個配置文件的標題,你就需要把它:

profile = AddProfile.all().filter('profiletitle', self.request.get('profile')).get() 

現在你可以使用該配置文件對象來創建你的AddLang:

lang = AddLang(profile=profile, language=language) 
lang.put() 
+0

感謝丹尼爾。我已經閱讀了Stack上的一些帖子。它現在將數據存儲在數據存儲中,並對視圖進行以下更新。我將添加上面的模板代碼和圖像。圖像中覆蓋配置文件的關鍵是什麼? – reed2903

+0

圖片沒有通過正確的,但可以在這裏找到:http://imm.io/1hTVN – reed2903

+0

我不知道你在問什麼:這正是你想要的,引用配置文件實體的關鍵。 –