18910140161

html-如何将内联克隆的表单标记为已删除,以便Django知道哪些要保存哪些不保存-堆栈溢出

顺晟科技

2022-10-19 11:50:06

75

views.py:

def device_add(request):
    if request.method == "POST":
        device_frm = DeviceForm(request.POST) 
        dd_form = DeviceDetailForm(request.POST)
        
        di_formset = inlineformset_factory(Device, DeviceInterface, fields=('moduletype', 'firstportid', 'lastportid'),widgets={  'firstportid':TextInput(attrs={'placeholder': 'e.g. TenGigabitEthernet1/0/1'}), 'lastportid':TextInput(attrs={'placeholder':'eg. TenGigabitEthernet1/0/48'})},extra=1,max_num=3, can_delete=False)
        di_form=di_formset(request.POST)
        if device_frm.is_valid():
        # Create and save the device
        # new_device here is the newly created Device object
            new_device = device_frm.save()
            if dd_form.is_valid():
                # Create an unsaved instance of device detail
                deviceD = dd_form.save(commit=False)
                # Set the device we just created above as this device detail's device
                deviceD.DD2DKEY = new_device              
                deviceD.save()
                if di_form.is_valid():
                    deviceI=di_form.save(commit=False) 
                    print(deviceI)
                    for instances in deviceI:          
                        instances.I2DKEY=new_device
                        instances.save()
                    return render(request, 'interface/device_added.html',{'devices':Device.objects.all()})
                return render(request,'interface/device_add.html',{'form':device_frm, 'dd_form': dd_form, 'di_form':di_form})
            return render(request,'interface/device_add.html',{'form':device_frm, 'dd_form': dd_form, 'di_form':di_form})
        return render(request,'interface/device_add.html',{'form':device_frm, 'dd_form': dd_form, 'di_form':di_form})
    else:
        device_frm = DeviceForm()
        dd_form = DeviceDetailForm()
        di_formset = inlineformset_factory(Device, DeviceInterface, fields=('moduletype', 'firstportid', 'lastportid'), widgets={  'firstportid':TextInput(attrs={'placeholder': 'e.g. TenGigabitEthernet1/0/1'}), 'lastportid':TextInput(attrs={'placeholder':'eg. TenGigabitEthernet1/0/48'})},extra=1, max_num=3, can_delete=False)
        di_form=di_formset(queryset = DeviceInterface.objects.none())
        return render(request,'interface/device_add.html',{'form':device_frm, 'dd_form': dd_form, 'di_form':di_form})

HTML:

def device_add(request):
    if request.method == "POST":
        device_frm = DeviceForm(request.POST) 
        dd_form = DeviceDetailForm(request.POST)
        
        di_formset = inlineformset_factory(Device, DeviceInterface, fields=('moduletype', 'firstportid', 'lastportid'),widgets={  'firstportid':TextInput(attrs={'placeholder': 'e.g. TenGigabitEthernet1/0/1'}), 'lastportid':TextInput(attrs={'placeholder':'eg. TenGigabitEthernet1/0/48'})},extra=1,max_num=3, can_delete=False)
        di_form=di_formset(request.POST)
        if device_frm.is_valid():
        # Create and save the device
        # new_device here is the newly created Device object
            new_device = device_frm.save()
            if dd_form.is_valid():
                # Create an unsaved instance of device detail
                deviceD = dd_form.save(commit=False)
                # Set the device we just created above as this device detail's device
                deviceD.DD2DKEY = new_device              
                deviceD.save()
                if di_form.is_valid():
                    deviceI=di_form.save(commit=False) 
                    print(deviceI)
                    for instances in deviceI:          
                        instances.I2DKEY=new_device
                        instances.save()
                    return render(request, 'interface/device_added.html',{'devices':Device.objects.all()})
                return render(request,'interface/device_add.html',{'form':device_frm, 'dd_form': dd_form, 'di_form':di_form})
            return render(request,'interface/device_add.html',{'form':device_frm, 'dd_form': dd_form, 'di_form':di_form})
        return render(request,'interface/device_add.html',{'form':device_frm, 'dd_form': dd_form, 'di_form':di_form})
    else:
        device_frm = DeviceForm()
        dd_form = DeviceDetailForm()
        di_formset = inlineformset_factory(Device, DeviceInterface, fields=('moduletype', 'firstportid', 'lastportid'), widgets={  'firstportid':TextInput(attrs={'placeholder': 'e.g. TenGigabitEthernet1/0/1'}), 'lastportid':TextInput(attrs={'placeholder':'eg. TenGigabitEthernet1/0/48'})},extra=1, max_num=3, can_delete=False)
        di_form=di_formset(queryset = DeviceInterface.objects.none())
        return render(request,'interface/device_add.html',{'form':device_frm, 'dd_form': dd_form, 'di_form':di_form})

脚本:

def device_add(request):
    if request.method == "POST":
        device_frm = DeviceForm(request.POST) 
        dd_form = DeviceDetailForm(request.POST)
        
        di_formset = inlineformset_factory(Device, DeviceInterface, fields=('moduletype', 'firstportid', 'lastportid'),widgets={  'firstportid':TextInput(attrs={'placeholder': 'e.g. TenGigabitEthernet1/0/1'}), 'lastportid':TextInput(attrs={'placeholder':'eg. TenGigabitEthernet1/0/48'})},extra=1,max_num=3, can_delete=False)
        di_form=di_formset(request.POST)
        if device_frm.is_valid():
        # Create and save the device
        # new_device here is the newly created Device object
            new_device = device_frm.save()
            if dd_form.is_valid():
                # Create an unsaved instance of device detail
                deviceD = dd_form.save(commit=False)
                # Set the device we just created above as this device detail's device
                deviceD.DD2DKEY = new_device              
                deviceD.save()
                if di_form.is_valid():
                    deviceI=di_form.save(commit=False) 
                    print(deviceI)
                    for instances in deviceI:          
                        instances.I2DKEY=new_device
                        instances.save()
                    return render(request, 'interface/device_added.html',{'devices':Device.objects.all()})
                return render(request,'interface/device_add.html',{'form':device_frm, 'dd_form': dd_form, 'di_form':di_form})
            return render(request,'interface/device_add.html',{'form':device_frm, 'dd_form': dd_form, 'di_form':di_form})
        return render(request,'interface/device_add.html',{'form':device_frm, 'dd_form': dd_form, 'di_form':di_form})
    else:
        device_frm = DeviceForm()
        dd_form = DeviceDetailForm()
        di_formset = inlineformset_factory(Device, DeviceInterface, fields=('moduletype', 'firstportid', 'lastportid'), widgets={  'firstportid':TextInput(attrs={'placeholder': 'e.g. TenGigabitEthernet1/0/1'}), 'lastportid':TextInput(attrs={'placeholder':'eg. TenGigabitEthernet1/0/48'})},extra=1, max_num=3, can_delete=False)
        di_form=di_formset(queryset = DeviceInterface.objects.none())
        return render(request,'interface/device_add.html',{'form':device_frm, 'dd_form': dd_form, 'di_form':di_form})

我有一组代码,用于控制使用按钮从内联创建的表单的数量。这一切都很顺利。但是说到保存,如果我要删除一些东西。我只能删除最后一个克隆的行,其余未删除的数据都将被保存。但是如果删除中间的克隆行,保存的数据就会变得混乱。例如,我的代码允许克隆3次。克隆+原始=4。如果我删除中间的一行。假设第1行(第一个克隆)。它保存原始数据(正确),从不保存第一个克隆数据(正确),保存第三行数据(正确),但不知何故最后一行数据丢失。有人能建议我该怎么办吗?我已经被困在这里3天了。

还有一个问题:几天前注意到这一点。由于我将视图设置为如果错误地键入了任何字段,则使用详细信息刷新页面,因此使用-按钮克隆的所有行都将消失。有人能向我解释为什么会这样吗?


顺晟科技:

  • TAG:
相关文章
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航