Formset не дает мне 3 формы по умолчанию и получил KeyError при сохранении
Здравствуйте, у меня возникла следующая ошибка при использовании набора форм. Тип исключения: KeyError
Значение исключения:
'module' Эта ошибка возникает, когда я пытаюсь нажать сохранить на странице добавления. В настоящее время на моей веб-странице только 1 набор форм. Я читал в интернете, что по умолчанию их 3, но даже после того, как я добавил extra=3. Он все еще 1. Кто-нибудь может мне помочь?
Вот мои коды:
views.py
def device_add(request):
if request.method == "POST":
device_frm = DeviceForm(request.POST) ##Part A1
dd_form = DeviceDetailForm(request.POST)
#di_form= DeviceInterfaceForm(request.POST)
di_formset = modelformset_factory(Device, DeviceInterface, fields=('moduletype', 'firstportid', 'lastportid'), extra = 3)
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
# If you did not render the hostname for the device detail, set it from the value of new device
deviceD.hostname = new_device.hostname
deviceD.save()
if di_form.is_valid():
deviceI=di_form.save(commit=False)
deviceI.I2DKEY=new_device
deviceI.save()
new_device=Device.objects.all()
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_form = DeviceInterfaceForm()
return render(request,'interface/device_add.html',{'form':device_frm, 'dd_form': dd_form, 'di_form':di_form})
models.py
class DeviceInterface(models.Model):
MODULE_ID_CHOICES = (
('TenGigabitEthernet','TenGigabitEthernet'),
('FortyGigabitEthernet','FortyGigabitEthernet'),
('GigabitEthernet','GigabitEthernet'),
('Ethernet','Ethernet'),
)
moduletype = models.CharField(max_length = 50,choices = MODULE_ID_CHOICES)
firstportid = models.CharField(max_length=50)
lastportid = models.CharField(max_length=50)
I2DKEY = models.ForeignKey(Device, on_delete=models.CASCADE) ##The key to link up the tables
def __str__(self):
return self.moduletype
forms.py
class DeviceInterfaceForm(ModelForm):
class Meta:
model= DeviceInterface
fields= ['moduletype', 'firstportid', 'lastportid']
labels = {
"moduletype":"Module Type",
"firstportid": "First Port ID",
"lastportid": "Last Port ID"
}
widgets = {
'firstportid':forms.TextInput(attrs={
'placeholder': 'e.g. TenGigabitEthernet1/0/1',
'class':'form-control',
'onchange':'portidChange(this.value)'
}),
'lastportid':forms.TextInput(attrs={
'placeholder': 'e.g. TenGigabitEthernet1/0/48',
'class': 'form-control',
'onchange':'portidChange(this.value)'
})
}
device_add.html
{% for form in di_form %}
{{form}}
<span>
{%endfor%}