ModelForm字段未显示

时间:2015-09-25 14:48:14

标签: django django-models django-forms

我知道这很简单,但我已经这么久了,应该是这里找不到我在这里做错了。

我有一个模型表格,我想要包含主键和名称:

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 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没有显示?

3 个答案:

答案 0 :(得分:1)

因为它是一个自动字段。你不能设置那些;它们由数据库自动分配,因此名称。因此,在表格上显示没有任何意义。

答案 1 :(得分:0)

尝试将return更改为:

return render(
    request,
    'app/create_bacnet.html',
    {
         'title':'Create BACnetDevice',
         'tag':'create_bacnet',
         'devices': devices
    }
)
  

render()与使用a调用render_to_response()相同   context_instance参数,强制使用RequestContext。

Render Shortcut

答案 2 :(得分:0)

设法跳过渲染。我可以通过&#34; inital&#34;来访问主键。我在迭代所有设备时的属性:

{{ device.modbus_devices.initial.ixModbusDevice }}