Django 表单初始数据被设置为列表
Django form initial data being set as lists
我试图在初始化时使用 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
转换为初始数据的 'proper' 字典,但默认行为不是错误的吗?
问题不在于表单,而在于您用来填充表单的内容。 QueryDicts 是一个特殊的 dict 子类,旨在支持查询字符串或 POST 数据中存在多个值的可能性,例如:
>>> QueryDict('a=1&b=2&b=3')
<QueryDict: {u'a': [u'1'], u'b': [u'2', u'3']}>
而且,正如您所发现的,它不适合用作表单初始数据。
您已经找到解决方法;我建议你继续这样做。
我试图在初始化时使用 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
转换为初始数据的 'proper' 字典,但默认行为不是错误的吗?
问题不在于表单,而在于您用来填充表单的内容。 QueryDicts 是一个特殊的 dict 子类,旨在支持查询字符串或 POST 数据中存在多个值的可能性,例如:
>>> QueryDict('a=1&b=2&b=3')
<QueryDict: {u'a': [u'1'], u'b': [u'2', u'3']}>
而且,正如您所发现的,它不适合用作表单初始数据。
您已经找到解决方法;我建议你继续这样做。