无效选择:无法在SelectField中选择ReferenceProperty值

2 投票
1 回答
1420 浏览
提问于 2025-04-16 20:00

我尝试在表单中使用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()

但是我总是收到:不是有效的选择。

有没有人知道如何在wtforms的SelectField中使用ReferenceProperty,或者你们有没有可以用的示例?

1 个回答

1

我通过在表单类中做了一些修改来解决我的问题:

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

不过如果有人知道更优雅的解决方案,欢迎分享!

撰写回答