【问题标题】:Django form initial data being set as listsDjango表单初始数据被设置为列表
【发布时间】:2015-05-08 17:51:01
【问题描述】:

我正在尝试在初始化时使用 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)

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

它当然打破了形式:

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

dict(request.GET.iteritems()) 会将request.GET 转换为初始数据的“正确”字典,但默认行为是否错误?

【问题讨论】:

    标签: django forms django-forms


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-05-06
      • 1970-01-01
      • 2012-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-21
      • 1970-01-01
      • 2018-05-22
      相关资源
      最近更新 更多