如何在django提交两份表格



我有一个模板,我应该有两个表单并更新它们,我成功地在同一模板中获得了这两个表单,但当我进行更改时,什么都没有发生!

表单.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'

型号.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)

视图.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})

我把这两个表单放在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')
# …

您应该只在两个表单有效的情况下重定向,否则您看不到表单上出现的错误。此外,您应该从OrderManageForm:的fields中删除customer

class OrderManageForm(forms.ModelForm):
class Meta:
model = Order
fields = ['product', 'quantity', 'status']  ← no customer

最新更新