gpt4 book ai didi

python - django 形式的动态表

转载 作者:太空宇宙 更新时间:2023-11-03 17:26:21 29 4
gpt4 key购买 nike

所以我已经阅读了文档并查看了几个答案,但我认为我在这里感到困惑。

我正在尝试构建一个可以动态添加行的表。我的表格行是根据名为 ModbusRegistersForm 的表单构建的。我在这里遇到的困难是理解这将如何与我的表单配合使用,因为每次添加一行时,它基本上都是另一个 ModbusRegistersForm正在添加(通过 jquery)。将这些动态添加的字段添加到我的表单中的可接受方式是什么?因为每一行几乎都是 ModbusRegistersForm 的重复。 ,是否应该将它们全部添加到 ModbusRegistersForm 内的列表中?还是有具体的方法来解决这个问题?我目前正在查看表单集,但从文档看来(至少对我来说)您必须预先定义 extra 的数量您想要的形式,因此它不会工作,因为它是动态的。

class ModbusRegistersForm(forms.Form):
OPTIONS = (('1', '(01) Discrete Output Coils'),
('2', '(02) Discrete Input Contacts'),
('3', '(03) Analog Output Registers'),
('4', '(04) Analog Input Registers')
)

starting_address = forms.IntegerField(max_value=99999,
widget=forms.TextInput(attrs={
'placeholder': 'Starting address',
'class': 'form-control'
}))
ending_address = forms.IntegerField(max_value=99999,
widget=forms.TextInput(attrs={
'placeholder': 'Ending address',
'class': 'form-control'
}))
register_type = forms.ChoiceField(widget=forms.Select(attrs={
'class': 'form-control',
'id': 'register-type'
}),
choices=OPTIONS
)
offset = forms.IntegerField(max_value=9999,
required=False,
widget=forms.TextInput(attrs={
'class': 'form-control',
'placeholder': 'Address offset'
}))

class CreateModbusForm(forms.Form):
port = forms.IntegerField(label="TCP/IP Port:",
max_value=65535,
validators = [[RegexValidator(regex='\d{1,5}', message='Not a valid port', code='Invalid port')]],
widget=forms.TextInput(attrs={
'placeholder': 'Port',
'class': 'form-control',
'id': 'port',
}))
slave_id = forms.IntegerField(label="Slave ID:",
max_value=247,
widget=forms.TextInput(attrs={
'placeholder': 'Slave id',
'class': 'form-control',
'id': 'slave-id',
}))
ip_address = forms.CharField(label="IP Address",
max_length=16,
widget=forms.TextInput(attrs={
'placeholder': 'Modbus IP address',
'class': 'form-control',
'id': 'ip-address',
}))

device_name = forms.CharField(label="Device Name:",
max_length=50,
widget=forms.TextInput(attrs={
'placeholder': 'Modbus device name',
'class': 'form-control',
'id': 'device-name'
}))

View .py

    modbus_device = CreateModbusForm()
registers = ModbusRegistersForm()

return render(
request,
'app/create_modbus.html',
context_instance = RequestContext(request,
{
'title':'Create Modbus Device',
'tag': 'create_modbus',
'modbus_device': modbus_device,
'registers': registers
})
)

html

                                 <tbody>
<tr id='addr_0'>
<td>
1
</td>
<td>
{{ registers.starting_address }}
</td>
<td>
{{ registers.ending_address }}
</td>
<td>
{{ registers.register_type }}
</td>
<td>
{{ registers.offset }}
</td>
</tr>
<tr id='addr_1'></tr>
</tbody>

最佳答案

表单集确实是答案。您可以通过 Javascript 增加 extra 和 Total 表单属性,因为它们存储为隐藏字段,并且您还可以使用表单集的 empty_form 方法来输出(例如在隐藏的 div 中)一个空表单, JS 可以克隆和更新其字段的 name/ID 属性。

关于python - django 形式的动态表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32503685/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com