Django将初始数据设置为列表

时间:2015-05-08 17:51:02

标签: django forms django-forms

我正在尝试使用request.GET数据初始化时设置一些初始表单数据:

获取数据:

http://localhost:8000/form_builder/SoW/create/?project=1&value=100

表格:

class SoWForm(forms.ModelForm):
    class Meta:
        model = SoW
        fields = (
            'project',
            'ref',
            'date_signed',
            'sow_file',
            'value',
            'status'
        )

    def __init__(self, *args, **kwargs):
        super(SoWForm, self).__init__(*args, **kwargs)
        self.helper = FormHelper(self)

表单初始化:

form = SoWForm(initial=request.GET)

所发生的是所有正在设置的表单字段都被填充为列表:

form initial fields are populated as lists

它打破了当然的形式:

broken form data

有没有办法避免这种情况?在尝试获取数据和内容时,它是否在途中某处(request.GET)?

dict(request.GET.iteritems())会将request.GET转换为适当的' dict为初始数据,但不是默认行为错误?

1 个答案:

答案 0 :(得分:0)

问题不在于表单,而在于您使用填充表单的方式。 QueryDicts是一个特殊的dict子类,旨在支持查询字符串或POST数据中多个值的可能性,例如:

>>> QueryDict('a=1&b=2&b=3')
<QueryDict: {u'a': [u'1'], u'b': [u'2', u'3']}>

并且,正如您所发现的那样,它不适合用作表单初始数据。

您已经找到了解决方法;我建议你继续这样做。