Сделайте внешний ключ редактируемым в наборе форм
Я действительно борюсь с django-forms. В частности, я хотел бы иметь набор форм моей модели OrderMedia, где иностранный ключ к contactMethod также является редактируемым (форма).
Models.py:
class OrderMedia(models.Model):
CHOICES = (
('IDB', _('IDB')),
('E', _('E')),
)
contactMethod = models.ForeignKey('BusinessContactMethod', on_delete=models.CASCADE)
publication = models.BooleanField(default=True)
management = MultiSelectField(choices=CHOICES, blank=True)
to_create = models.BooleanField(default=False)
from_order = models.ForeignKey('Order', on_delete=models.CASCADE)
class BusinessContactMethod(models.Model):
medium = models.ForeignKey(ContactMedium, on_delete=models.CASCADE)
value = models.CharField(max_length=100, blank=True, null=True)
active = models.BooleanField(default=True)
Views.py:
class NewOrderPart2(View):
form_class = OrderForm
template_name = 'orders/new_order_part2.html'
def get(self, request, *args, **kwargs):
est_number = self.kwargs['est_number']
order = Order.objects.get(est_number=est_number)
MediumFormset = inlineformset_factory(Order, OrderMedia, exclude=[''], extra=1, can_delete=True)
mediums = MediumFormset(instance=order)
form = self.form_class(instance=order)
return render(request, self.template_name,{
'form': form,
'mediums': mediums,
})
def post(self, request, *args, **kwargs):
est_number = self.kwargs['est_number']
order = Order.objects.get(est_number=est_number)
MediumFormset = inlineformset_factory(Order, OrderMedia, exclude=[''], extra=1, can_delete=True)
mediums = MediumFormset(request.POST, instance=order)
form = self.form_class(request.POST, instance=order)
if mediums.is_valid():
mediums.save()
print(mediums)
if form.is_valid():
form.save()
return HttpResponseRedirect(f'/order/{est_number}')
return render(request, self.template_name,
{
'form': form,
'mediums': mediums,
})
Forms.py:
class OrderForm(forms.ModelForm):
class Meta:
model = Order
fields = '__all__'
widgets = {
'order_start': DateInput,
'order_end': DateInput,
'order_publication': DateInput,
'contact_signed_date': DateInput,
}
Шаблон:
<form method="POST">
<div id="form_set">
{% for form in mediums.forms %}
<div class='custom-select'>
{{form }}
<div>
{% endfor %}
</div>
</form>
Я пробовал искать, как сделать внешние ключи редактируемыми, но нашел только решения для Modelforms, где вы перезаписываете метод сохранения. Но я не могу понять, как это сделать с наборами форм.
Есть советы, как с этим справиться?