使用动态字段在 Django 中通过两个模型创建单个表单
Create Single Forms by Two Models in Django with Dynamic Fields
我想创建 Django Forms 来保存商店的交易。我想要一个类似于此的最终模板。我的数据库的 ER 图也显示在图像中。
我的 Django 模型是:
class Party(models.Model):
party_id = models.BigAutoField(primary_key=True)
party_name = models.CharField(max_length=128)
party_phone = models.CharField(max_length=128)
party_address = models.CharField(max_length=128)
def __str__(self):
return self.party_name
class Items(models.Model):
item_no = models.BigAutoField(primary_key=True)
item_type = models.BooleanField(default=True)
item_name = models.CharField(max_length=128)
item_qty = models.PositiveIntegerField(default=0)
item_cost = models.PositiveIntegerField(default=0)
def __str__(self):
return self.item_name
class Sales(models.Model):
invoice_no = models.BigAutoField(primary_key=True)
invoice_date = models.DateField(default=date.today)
party = models.ForeignKey(Party, on_delete=models.CASCADE)
def __str__(self):
return str(self.invoice_no)
class SalesTransaction(models.Model):
sales = models.ForeignKey(Sales, on_delete=models.CASCADE)
items = models.ForeignKey(Items, on_delete=models.CASCADE)
purchase_qty = models.PositiveIntegerField(default=0)
total_cost = models.PositiveIntegerField(default=0)
def __str__(self):
return self.item_name
我可以用 AJAX 实现这个,但我认为这不是最好的解决方案,因为必须使用硬编码进行大量验证。
如何创建 Django 表单以在一次“保存”单击中将数据保存在多个表中?
我最近一直在寻找一种方法来做同样的事情。我偶然发现的解决方案是在单个 <form>
标记下使用两个表单对象。您可以通过在传递给上下文之前给它们 prefix
属性来区分表单对象。例如:
def get_view(request):
....
form1 = Form1(prefix="form1")
form2 = Form2(prefix="form2")
return render(request, 'template.html', {'form1': form1, 'form2': form2})
在您的模板中,您可以像往常一样在单个表单标签下调用它们:
<form>
{{ form1.as_p }}
{{ form2.as_p }}
<input type='submit'>
</form>
现在在您的 post 视图中,您可以使用前缀分别获取每个表单的数据:
def post_view(request):
form1 = Form1(request.POST, prefix="form1")
form2 = Form2(request.POST, prefix="form2")
....
我想创建 Django Forms 来保存商店的交易。我想要一个类似于此的最终模板。我的数据库的 ER 图也显示在图像中。
我的 Django 模型是:
class Party(models.Model):
party_id = models.BigAutoField(primary_key=True)
party_name = models.CharField(max_length=128)
party_phone = models.CharField(max_length=128)
party_address = models.CharField(max_length=128)
def __str__(self):
return self.party_name
class Items(models.Model):
item_no = models.BigAutoField(primary_key=True)
item_type = models.BooleanField(default=True)
item_name = models.CharField(max_length=128)
item_qty = models.PositiveIntegerField(default=0)
item_cost = models.PositiveIntegerField(default=0)
def __str__(self):
return self.item_name
class Sales(models.Model):
invoice_no = models.BigAutoField(primary_key=True)
invoice_date = models.DateField(default=date.today)
party = models.ForeignKey(Party, on_delete=models.CASCADE)
def __str__(self):
return str(self.invoice_no)
class SalesTransaction(models.Model):
sales = models.ForeignKey(Sales, on_delete=models.CASCADE)
items = models.ForeignKey(Items, on_delete=models.CASCADE)
purchase_qty = models.PositiveIntegerField(default=0)
total_cost = models.PositiveIntegerField(default=0)
def __str__(self):
return self.item_name
我可以用 AJAX 实现这个,但我认为这不是最好的解决方案,因为必须使用硬编码进行大量验证。
如何创建 Django 表单以在一次“保存”单击中将数据保存在多个表中?
我最近一直在寻找一种方法来做同样的事情。我偶然发现的解决方案是在单个 <form>
标记下使用两个表单对象。您可以通过在传递给上下文之前给它们 prefix
属性来区分表单对象。例如:
def get_view(request):
....
form1 = Form1(prefix="form1")
form2 = Form2(prefix="form2")
return render(request, 'template.html', {'form1': form1, 'form2': form2})
在您的模板中,您可以像往常一样在单个表单标签下调用它们:
<form>
{{ form1.as_p }}
{{ form2.as_p }}
<input type='submit'>
</form>
现在在您的 post 视图中,您可以使用前缀分别获取每个表单的数据:
def post_view(request):
form1 = Form1(request.POST, prefix="form1")
form2 = Form2(request.POST, prefix="form2")
....