我有多个重复的表单(模型表单),我用它来生成我的布局以创建设备,并为每个表单添加前缀。 (由于其他原因无法使用formset)
形式:
class CreateModbusForm(ModelForm):
class Meta:
model = ModbusDevice
fields = ['ixModbusDevice', 'sModbusName','iPort', 'iSlave', 'sIP']
widgets = {
'sModbusName': TextInput(attrs={'placeholder': 'Device Name','class': 'form-control','data-form': '0',}),
'iPort': TextInput(attrs={'placeholder': 'Port','class': 'form-control','data-form': '0',}),
'iSlave': TextInput(attrs={'placeholder': 'Slave id','class': 'form-control','data-form': '0',}),
'sIP': TextInput(attrs={'placeholder': 'Modbus IP address','class': 'form-control','data-form': '0',})
}
view:
modbus_qset = ModbusDevice.objects.all()
if modbus_qset:
for device in modbus_qset:
modbus_form = CreateModbusForm(instance=device, prefix="modbus-id_" + str(device.pk))
我遇到的问题是当我将数据发回更新(ajax post)时,我的表单总是出现This field is required
错误。
if request.method == 'POST':
my_dic = dict(urlparse.parse_qsl(request.POST['form']))
modbus_device = CreateModbusForm(my_dic, prefix='modbus-id_2')#hard coded for testing
无论我做什么都没关系,因为这个错误我的表格没有通过is_valid()
,但我不知道为什么它给我这个如果我&# 39; m传递帖子数据
(我必须转换我的request.POST['form']
,因为它从ajax调用序列化为json并最终成为unicode而不是QueryDict)
答案 0 :(得分:1)
所以我意识到我的html中的name
和id
格式错误了。 django会生成一个像id_modbus-id_2-iPort
的id,但我的问题是我的id有一个下划线而不是一个连字符。所以我的身份是id_modbus-id_2_iPort
而django没有认出来