ModelForm 字段未显示
ModelForm field not showing
我知道这很简单,但我已经在这上面工作了很长时间,但我找不到我在这里做错了什么。
我有一个模型表单,我想在其中包含主键和名称:
class ModbusDevice(models.Model):
ixModbusDevice = models.AutoField(primary_key=True)
sModbusName = models.CharField(verbose_name='Device Name',max_length=100)
class BACnetModbusDeviceForm(ModelForm):
class Meta:
model = ModbusDevice
fields = ['ixModbusDevice', 'sModbusName']
widgets = {
'ixModbusDevice' : TextInput(),
'sModbusName' : TextInput(attrs={'class': 'form-control', 'readonly': True}),
}
那么在我看来我有:
(BACnetModbusContainer 是自定义的 class)
class BACnetModbusContainer:
modbus_devices = None
bacnet_devices = None
方法:
modbus_devices = ModbusDevice.objects.all()
devices = []
for idx,device in enumerate(modbus_devices):
container = BACnetModbusContainer()
container.bacnet_devices = BACnetDeviceForm(prefix="bacnet_" + str(idx))
container.modbus_devices = BACnetModbusDeviceForm(instance=device, prefix="modbus_" + str(idx))
devices.append(container)
return render(
request,
'app/create_bacnet.html',
context_instance = RequestContext(request,
{
'title':'Create BACnet Device',
'tag': 'create_bacnet',
'devices': devices
})
)
然后在我的模板中:
{% for device in devices %}
<tr>
<td>
{{ device.modbus_devices.sModbusName }}
{{ device.modbus_devices.ixModbusDevice }}
</td>
</tr>
{% endfor %}
为什么我的 ixModbusDevice
没有显示?
尝试将 return
更改为:
return render(
request,
'app/create_bacnet.html',
{
'title':'Create BACnetDevice',
'tag':'create_bacnet',
'devices': devices
}
)
render() is the same as a call to render_to_response() with a
context_instance argument that forces the use of a RequestContext.
设法跳过渲染。当我遍历所有设备时,我可以通过 "inital" 属性访问主键:
{{ device.modbus_devices.initial.ixModbusDevice }}
因为它是一个自动字段。你不能设置那些;它们由数据库自动分配,因此得名。因此,在表格上显示 then 是没有意义的。
我知道这很简单,但我已经在这上面工作了很长时间,但我找不到我在这里做错了什么。
我有一个模型表单,我想在其中包含主键和名称:
class ModbusDevice(models.Model):
ixModbusDevice = models.AutoField(primary_key=True)
sModbusName = models.CharField(verbose_name='Device Name',max_length=100)
class BACnetModbusDeviceForm(ModelForm):
class Meta:
model = ModbusDevice
fields = ['ixModbusDevice', 'sModbusName']
widgets = {
'ixModbusDevice' : TextInput(),
'sModbusName' : TextInput(attrs={'class': 'form-control', 'readonly': True}),
}
那么在我看来我有: (BACnetModbusContainer 是自定义的 class)
class BACnetModbusContainer:
modbus_devices = None
bacnet_devices = None
方法:
modbus_devices = ModbusDevice.objects.all()
devices = []
for idx,device in enumerate(modbus_devices):
container = BACnetModbusContainer()
container.bacnet_devices = BACnetDeviceForm(prefix="bacnet_" + str(idx))
container.modbus_devices = BACnetModbusDeviceForm(instance=device, prefix="modbus_" + str(idx))
devices.append(container)
return render(
request,
'app/create_bacnet.html',
context_instance = RequestContext(request,
{
'title':'Create BACnet Device',
'tag': 'create_bacnet',
'devices': devices
})
)
然后在我的模板中:
{% for device in devices %}
<tr>
<td>
{{ device.modbus_devices.sModbusName }}
{{ device.modbus_devices.ixModbusDevice }}
</td>
</tr>
{% endfor %}
为什么我的 ixModbusDevice
没有显示?
尝试将 return
更改为:
return render(
request,
'app/create_bacnet.html',
{
'title':'Create BACnetDevice',
'tag':'create_bacnet',
'devices': devices
}
)
render() is the same as a call to render_to_response() with a context_instance argument that forces the use of a RequestContext.
设法跳过渲染。当我遍历所有设备时,我可以通过 "inital" 属性访问主键:
{{ device.modbus_devices.initial.ixModbusDevice }}
因为它是一个自动字段。你不能设置那些;它们由数据库自动分配,因此得名。因此,在表格上显示 then 是没有意义的。