Является ли это правильным способом обновления существующих данных с помощью набора форм?

У меня есть следующий код для обновления моей базы данных с помощью formset для одной части формы. Я могу получить queryset и отобразить его в настоящее время. Но когда я отправляю запрос обратно, di_form выдает следующую ошибку в powershell []. Может ли кто-нибудь подсказать мне, как это исправить? Спасибо.

def device_edit(request, pk):
    device = Device.objects.get(pk=pk)
    deviceDetail = DeviceDetail.objects.get(DD2DKEY=pk)
    deviceInterface = DeviceInterface.objects.filter(I2DKEY = pk)
    
    if request.method == 'POST':
        # Device_frm contains only hostname and ip address
        device_frm = DeviceForm2(request.POST)
        dd_form = DeviceDetailForm2(request.POST)
        di_formset = modelformset_factory(DeviceInterface, fields=('moduletype', 'firstportid', 'lastportid'), extra=1,max_num=3)
        di_form=di_formset(request.POST)
        device_frm.hostname = device.hostname
        device_frm.ipaddr = device.ipaddr
        if device_frm.is_valid():   
            Device.objects.filter(pk=pk).update(ipaddr=device_frm.cleaned_data['ipaddr'])       
            if dd_form.is_valid():
                DeviceDetail.objects.filter(DD2DKEY=pk).update(mgt_interface=dd_form.cleaned_data['mgt_interface'],subnetmask = dd_form.cleaned_data['subnetmask'],ssh_id = dd_form.cleaned_data['ssh_id'],ssh_pwd = dd_form.cleaned_data['ssh_pwd'],enable_secret = dd_form.cleaned_data['enable_secret'], dev_mod = dd_form.cleaned_data['dev_mod'])
                if di_form.is_valid():
                    for instances in deviceInterface:
                        DeviceInterface.objects.filter(I2DKEY = pk).update(moduletype = di_form.cleaned_data['moduletype'], firstportid = di_form.cleaned_data['firstportid'], lastportid = di_form.cleaned_data['lastportid'])
        
                    return redirect('/device/', {'device':Device.objects.all, 'devices':device})
                else:
                    print(di_form.errors)
    else:
        device_frm = DeviceForm2()
        dd_form = DeviceDetailForm2()
        di_form = DeviceInterfaceForm()
    
    return render(request, 'interface/device_edit.html',{'form': device_frm, 'dd_form': dd_form, 'di_form': di_form, 'devices':device, 'deviceDetail':deviceDetail, 'deviceInterface':deviceInterface })
Вернуться на верх