Django 模型表单集显示数据库数据而不是空表单集

标签 django django-models django-forms formset

我正在使用模型表单集来允许用户动态地将重复表单添加到表中(modbus 寄存器,因为设备可以有多个寄存器)。

我遇到的问题是,一旦我保存表单集(存储到数据库),当我返回同一页面使用寄存器创建新设备时,django 会渲染所有以前创建的表单,而不是仅渲染 1 个表单空表单(然后可以向其中添加表单)。

这是在我的表单集中创建了 3 个表单(存储在数据库中)后的示例: enter image description here

它应该是这样的: enter image description here

它应该只在我的表单集中显示 1 个空表单,然后用户可以动态添加表单。

我的观点:

def create_modbus_view(request):
    modbus_device = CreateModbusForm()
    RegisterFormset = modelformset_factory(Register, form=ModbusRegistersForm)
    register_forms = RegisterFormset()

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

型号:

class Register(models.Model):
    ixRegister = models.AutoField(primary_key=True)
    sRegisterName = models.CharField(max_length=100)
    iStartingAddr = models.IntegerField()
    bRange = models.BooleanField(default=False)
    ixRegisterType = models.ForeignKey(RegisterType)
    iOffset = models.IntegerField(blank=True, null=True)

    class Meta:
        db_table = 'TRegister'

class ModbusDevice(models.Model):
    ixModbusDevice = models.AutoField(primary_key=True)
    sModbusName = models.CharField(verbose_name='Device Name',max_length=100)
    iPort = models.IntegerField(verbose_name='Port')
    iSlave = models.IntegerField(verbose_name='Slave ID')
    sIP = models.GenericIPAddressField(verbose_name='IP Address')

    class Meta:
        db_table = 'TModbusDevice'

表格:

class ModbusRegistersForm(ModelForm):
    ixRegisterType = ModelChoiceField(queryset=RegisterType.objects.all()),
    bRange = BooleanField(required=False)
    bRange.widget.attrs['data-form'] = 0
    class Meta:
        model = Register
        fields = ['sRegisterName','iStartingAddr','bRange','ixRegisterType','iOffset']
        widgets = {
                'sRegisterName': TextInput(attrs={'placeholder': 'Register Name','class': 'form-control', 'data-form': '0'}),
                'iStartingAddr': TextInput(attrs={'placeholder': 'Starting address','class': 'form-control','data-form': '0'}),
                'iOffset': TextInput(attrs={'placeholder': 'Address offset','class': 'form-control','data-form': '0'}),
            }


class CreateModbusForm(ModelForm):
    class Meta:
        model = ModbusDevice
        fields = ['sModbusName','iPort', 'iSlave', 'sIP']
        widgets = {
                'sModbusName': TextInput(attrs={'placeholder': 'Device Name','class': 'form-control','id': 'device-name',}),
                'iPort': TextInput(attrs={'placeholder': 'Port','class': 'form-control','id': 'port',}),
                'iSlave': TextInput(attrs={'placeholder': 'Slave id','class': 'form-control','id': 'slave-id',}),
                'sIP': TextInput(attrs={'placeholder': 'Modbus IP address','class': 'form-control','id': 'ip-address',})
            }

最佳答案

关于Django 模型表单集显示数据库数据而不是空表单集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32721404/

相关文章:

django - 剧作家+ Django : how to wait for events

python - Pandas to_sql() 不适用于 PostgreSQL - 对于类型字符不同的值太长

python - Django 模型检索相同的结果

python - 在 Django 中保存或显示表单数据的最简单方法

python - Django 身份验证/登录问题

Django DateTime 字段生成带 OUT 时区的时间戳字段

django - 创建实例时如何更新 ManyToManyField

django - 如何将模型从 CBV 传递到 ModelForm

django - 指定 django 隐藏表单字段的默认值 - 骨骼干燥?

django 表单下拉列表,其中包含所有用户