Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无效选择:Can';t在SelectField wtform中选择ReferenceProperty值_Python_Google App Engine_Tipfy_Wtforms - Fatal编程技术网

Python 无效选择:Can';t在SelectField wtform中选择ReferenceProperty值

Python 无效选择:Can';t在SelectField wtform中选择ReferenceProperty值,python,google-app-engine,tipfy,wtforms,Python,Google App Engine,Tipfy,Wtforms,我尝试在表单中使用ReferenceProperty来创建/编辑条目,但什么也没发生 我有: class Type(db.Model): name = db.StringProperty() class Entry(db.Model): type = db.ReferenceProperty(Type, required=False) class EntryForm(Form): _type_list = [] for

我尝试在表单中使用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()
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()
但我总是有:这不是一个有效的选择


是否有人知道如何使用wtforms SelectField中的ReferenceProperty,或者您是否为此提供了工作示例?

我在表单类中通过这些更改解决了我的问题:

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_key_name(self.form.type.data).key(),
        }
        entry = Entry(**values)
        entry.put()
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()

但如果有人知道更优雅的解决方案,欢迎您

你在哪一行得到这个错误?所以你可能在if语句的那一行得到它。选项是否正确显示?您是否选择了一个?如果字段数据不是可能选项的一部分,SelectField.pre_validate似乎会引发异常。()当我尝试保存所选值时,我在表单验证时遇到“无效选择”。是值正确显示。