2011-06-21 60 views
2

我嘗試在表單中使用ReferenceProperty來創建/編輯Entry,但沒有任何結果。不是有效的選擇:無法在SelectField平臺上選擇ReferenceProperty值

我有:

class Type(db.Model): 
    name  = db.StringProperty() 



class Entry(db.Model): 
    type   = db.ReferenceProperty(Type, required=False) 

class EntryForm(Form): 
    _type_list = [] 
    for type in Type.all(): 
     _type_list.append((type.key(),type.name)) 
    type   = fields.SelectField(u'Type of entry', choices = _type_list) 

和編輯處理程序:

def post(self, **kwargs): 
    self.form = EntryForm(self.request.form) 
    if self.form.validate(): 
     values = { 
      'type': models.Type.get_by_key_name(self.form.type.data).key(), 
     } 
     entry = Entry(**values) 
     entry.put() 

,但我總有:不是有效的選擇

是否enyone知道如何使用的ReferenceProperty在wtforms SelectField或工作你可以爲此工作嗎?

+0

你在哪一行得到這個錯誤? – fgm2r

+0

所以你可能會用if語句來解決問題。選項是否正確顯示,您是否選擇了一個?如果字段數據不是可能選擇的一部分,SelectField.pre_validate似乎會引發異常。 (http://code.google.com/p/tipfy/source/browse/source/lib/wtforms/fields.py?r=d5bfbedf3a33f23da014db73a41c82fbf4b10393) – fgm2r

+0

我有「不是一個有效的選擇」在表單驗證,當我嘗試保存選定的值。值是正確顯示。 – inoks

回答

1

我解決我的問題,這個變化在Form類:

class EntryForm(Form): 
    _type_list = [] 
    for type in Type.all(): 
     _type_list.append((type.key().id(),type.name)) 
    type   = fields.SelectField(u'Type of entry', choices = _type_list, coerce=int) 

和編輯處理程序:

def post(self, **kwargs): 
    self.form = EntryForm(self.request.form) 
    if self.form.validate(): 
     values = { 
      'type': models.Type.get_by_id(self.form.type.data), 
     } 
     entry = Entry(**values) 
     entry.put() 

但如果有人知道更優雅的解決方案,歡迎您!