1
如果我使用form.clean()方法處理簡單的formset,並且我使用輸入值從相關模型中提取數據,那麼如何將該數據保存到單獨的模型類中由formset?Django表單 - 有沒有任何方法將數據保存到表單的單獨模型中?
代碼:
#forms.py
class SlotInlineFormSet(BaseInlineFormSet):
def clean(self):
super(SlotInlineFormSet, self).clean()
y = self.cleaned_data
print(y)
# Access each form one at a time
for idx, form in enumerate(self.forms):
form_data = form.cleaned_data
print('idx: ' + str(idx+1))
#Pull Necessary Port Variables
port_type = (form_data['installed_card'].default_port_type)
max_ports = (form_data['installed_card'].max_port_num)
port_start_num = (form_data['installed_card'].port_start_num)
port_naming = (form_data['installed_card'].port_naming)
#Save Ports to Port model
#???
#views.py
def manage_slots(request, node_id):
node = Node.objects.get(pk=node_id)
max_slots = node.chassis.num_slots
SlotFormSet = inlineformset_factory(Node, Slot, max_num=max_slots, extra = max_slots-node.slot_set.count(),
can_order = False, fields=('installed_card',), can_delete=False, formset = SlotInlineFormSet)
if request.method == "POST":
formset = SlotFormSet(request.POST, request.FILES, instance=node)
if formset.is_valid():
forms = formset.save(commit=False)
### Save form slot number as an enumeration ###
formset.save()
messages.success(request, "Slot details saved!")
return redirect("appDB:apphome")
else:
formset = SlotFormSet(instance=node)
return render(request, 'forms/manage_slots.html', {'formset': formset})
#models.py - Port class to save to
class Port(models.Model):
slot = models.ForeignKey(Slot)
port_num = models.PositiveSmallIntegerField()
port_type = models.ForeignKey(PortDef)
class Meta:
unique_together = ("slot", "port_num")
def __str__(self):
if self.slot.sub_slot_num is None:
return u'%s - Port: %s%s/%s' % (self.slot.node, self.slot.installed_card.port_naming, self.slot.slot_num, self.port_num)
if self.slot.sub_slot_num is not None:
return u'%s - Port: %s%s/%s/%s' % (self.slot.node, self.slot.installed_card.port_naming, self.slot.slot_num, self.slot.sub_slot_num, self.port_num)
def get_absolute_url(self):
return reverse('Port-detail', kwargs={'pk': self.pk})
謝謝。
爲什麼我會用Port.objects.get(插槽= Your_slot)如果該數據不存在了嗎?我會用保存功能 –
@SharadS創建這些數據。 Your_slot變量是爲了您的理解。使用任何條件獲取您想要保存port_type數據的Port記錄。 –
@SharadS。如果要創建新記錄,請使用** create ** Port.objects.create(slot = Your_slot),並將插槽日期或時間放入Your_slot變量中。 –