Как я могу отправить две формы в django
У меня есть шаблон, в котором я должен иметь 2 формы и обновлять их, мне удалось получить 2 формы в одном шаблоне, но когда я вношу изменения, ничего не происходит!
forms.py
class OrderManageForm(forms.ModelForm):
class Meta:
model = Order
fields = ['customer', 'product', 'quantity', 'status']
class CustomerForm(forms.ModelForm):
address = forms.CharField(widget=forms.Textarea(attrs={'rows': 5}))
class Meta:
model = Customer
fields = ['full_name', 'address', 'phone', 'city', 'email'
models.py
class Customer(models.Model):
full_name = models.CharField(max_length=150)
address = models.CharField(max_length=1500, null=True)
phone = models.CharField(max_length=20)
city = models.CharField(max_length=100)
email = models.EmailField(null=True)
def __str__(self):
return self.full_name
class Order (models.Model):
product = models.ForeignKey(Product, on_delete=models.CASCADE)
customer = models.ForeignKey(Customer, on_delete=models.CASCADE,)
quantity = models.IntegerField(default=1)
status = models.TextField(choices=ORDER_STATUS, default='Pending')
def __str__(self):
return 'Order n°: ' + str(self.id)
views.py
def update_order(request, order_id):
order = get_object_or_404(Order, id=order_id)
cust = get_object_or_404(Customer, order__id=order_id)
if request.method == 'POST':
customer = CustomerForm(request.POST)
form = OrderManageForm(request.POST)
print(request.POST)
if form.is_valid() and customer.is_valid():
order = form.save(commit=False)
customer = customer.save()
order.customer = customer
order.save()
return redirect('orders')
else:
form = OrderManageForm(instance=order)
customer = CustomerForm(instance=cust)
return render(request, 'dashboard/order_details.html', {'form': form, 'customer': customer})
Я поместил 2 формы только в один тег формы в моем HTML шаблоне
Вам нужно передать экземпляры в формы так, чтобы формы могли обновить соответствующие записи:
def update_order(request, order_id):
order = get_object_or_404(Order, id=order_id)
cust = order.customer
if request.method == 'POST':
customer = CustomerForm(request.POST, instance=cust)
form = OrderManageForm(request.POST, instance=order)
if form.is_valid() and customer.is_valid():
form.save()
customer.save()
return redirect('orders')
# …
Вы должны перенаправлять только в том случае, если обе формы валидны, иначе вы не сможете увидеть ошибки, которые появляются на форме. Кроме того, вам следует удалить customer
из fields
из OrderManageForm
:
class OrderManageForm(forms.ModelForm):
class Meta:
model = Order
fields = ['product', 'quantity', 'status'] ← no customer