如何在应用引擎上制作多选表单字段

1 投票
1 回答
999 浏览
提问于 2025-04-15 18:56

我正在使用应用引擎开发一个应用程序,想要创建一个可以选择多个选项的表单字段。
这是我的表单(它使用的是来自应用引擎SDK的django.newforms(django 0.96)):

from google.appengine.ext.db import djangoforms
from django import newforms

class KeywordForm(djangoforms.ModelForm):
    class Meta:
        model = Keyword
        exclude = ['site', 'created_at', 'last_update']

    choices = [ (1, 'value1'), (2, 'value2'), (3, 'value3'), (4, 'value4') ]
    server = newforms.fields.MultipleChoiceField(choices = choices)

问题是:当我提交表单(选择了一个或多个值)时,出现了这个验证错误:“请输入一个值列表。

我不明白为什么会这样……如果能帮我解决这个问题,我将非常感激。
谢谢! :)

编辑(额外信息):
这是表单验证的代码:

 form = forms.KeywordForm(data=self.request.POST)
 if form.is_valid():
     ...

self.request.POST :

UnicodeMultiDict([(u'keyword', u'test'), (u'server[]', u'1'), (u'server[]', u'2')])

1 个回答

2

我找到了解决办法!

问题出在我给表单构造函数传递的 self.request.POST 字典上。
这个字典的格式不被 MultipleChoiceField.clean() 函数接受,所以我对它进行了转换。

下面是有效的验证代码:

 args = self.request.arguments()
 data = {}
 for i in args:
     data[i] = self.request.get_all(i)
 form = forms.KeywordForm(data=data)
 if form.is_valid():
     [...]

撰写回答