在 Django 中的同一模型上保存两个实例
Save two instances on same model in django
在我的例子中,它是一个财务管理应用程序,任务是我想将金额 x 从财务 A 转移到财务 B,从银行到收银员或从 paypal acc 到我的银行,我要添加两个实例到同一个table (treasuryitem) 但细节不同 (treasury)。在下面的代码中,我有两个实例,但在这两个实例中,外地国库并没有按照我的选择保存,它保存相同,用于 ex treasury A。另外,我想只填写第一个表格和第二个表格的国库,第二个表格的其他字段必须自动保存(name=name,date=date,debit=credit,credit=debit)。任何人都可以帮忙。提前致谢
型号:
class Treasury(models.Model):
name = models.CharField(max_length=256)
class TreasuryItem(models.Model):
treasury = models.ForeignKey('Treasury', on_delete=models.CASCADE)
date = models.DateField(default=timezone.now)
name = models.CharField(max_length=256)
debit = models.DecimalField(max_digits=20, decimal_places=2, null=True, blank=True)
credit = models.DecimalField(max_digits=20, decimal_places=2, null=True, blank=True)
表格:
class TreasuryItem1Form(ModelForm):
class Meta:
model = TreasuryItem
fields = "__all__"
class TreasuryItem2Form(ModelForm):
class Meta:
model = TreasuryItem
fields = "__all__"
查看:
def TreasuryItem_Create(request, pk):
treasurys = Treasury.objects.all()
treasury = treasurys.get(id=pk)
form1 = TreasuryItem1Form()
form2 = TreasuryItem2Form()
if request.method == 'POST':
form1 = TreasuryItem1Form(request.POST)
form2 = TreasuryItem2Form(request.POST)
if form1.is_valid() and form2.is_valid():
form1.save()
form2.save()
return redirect('treasury_profile', pk)
您不需要两个表单实例。只需在将 id
设置为 None
后重新保存实例,以便强制在数据库中插入新内容。
def TreasuryItem_Create(request, pk):
treasurys = Treasury.objects.all()
treasury = treasurys.get(id=pk)
form1 = TreasuryItem1Form()
if request.method == 'POST':
form1 = TreasuryItem1Form(request.POST)
if form1.is_valid() and form2.is_valid():
treasury_item = form1.save()
treasury_item.id = None
# modify any other field if need
# treasury_item.name = 'my new name`
treasury_item.save()
return redirect('treasury_profile', pk)
在我的例子中,它是一个财务管理应用程序,任务是我想将金额 x 从财务 A 转移到财务 B,从银行到收银员或从 paypal acc 到我的银行,我要添加两个实例到同一个table (treasuryitem) 但细节不同 (treasury)。在下面的代码中,我有两个实例,但在这两个实例中,外地国库并没有按照我的选择保存,它保存相同,用于 ex treasury A。另外,我想只填写第一个表格和第二个表格的国库,第二个表格的其他字段必须自动保存(name=name,date=date,debit=credit,credit=debit)。任何人都可以帮忙。提前致谢
型号:
class Treasury(models.Model):
name = models.CharField(max_length=256)
class TreasuryItem(models.Model):
treasury = models.ForeignKey('Treasury', on_delete=models.CASCADE)
date = models.DateField(default=timezone.now)
name = models.CharField(max_length=256)
debit = models.DecimalField(max_digits=20, decimal_places=2, null=True, blank=True)
credit = models.DecimalField(max_digits=20, decimal_places=2, null=True, blank=True)
表格:
class TreasuryItem1Form(ModelForm):
class Meta:
model = TreasuryItem
fields = "__all__"
class TreasuryItem2Form(ModelForm):
class Meta:
model = TreasuryItem
fields = "__all__"
查看:
def TreasuryItem_Create(request, pk):
treasurys = Treasury.objects.all()
treasury = treasurys.get(id=pk)
form1 = TreasuryItem1Form()
form2 = TreasuryItem2Form()
if request.method == 'POST':
form1 = TreasuryItem1Form(request.POST)
form2 = TreasuryItem2Form(request.POST)
if form1.is_valid() and form2.is_valid():
form1.save()
form2.save()
return redirect('treasury_profile', pk)
您不需要两个表单实例。只需在将 id
设置为 None
后重新保存实例,以便强制在数据库中插入新内容。
def TreasuryItem_Create(request, pk):
treasurys = Treasury.objects.all()
treasury = treasurys.get(id=pk)
form1 = TreasuryItem1Form()
if request.method == 'POST':
form1 = TreasuryItem1Form(request.POST)
if form1.is_valid() and form2.is_valid():
treasury_item = form1.save()
treasury_item.id = None
# modify any other field if need
# treasury_item.name = 'my new name`
treasury_item.save()
return redirect('treasury_profile', pk)