Сохранить два экземпляра на одной модели в django

В моем случае, это приложение для управления казначейством, задача состоит в том, что я хочу перевести сумму x из казначейства A в казначейство B, из банка в кассу или со счета paypal в мой банк, я добавляю два экземпляра в одну таблицу (treasuryitem), но с разными реквизитами (казначейство). В приведенном ниже коде я получил два экземпляра, но поле казначейство не сохраняется так, как я выбираю, оно сохраняется одинаково, например, казначейство A в обоих экземплярах. Также я хотел бы заполнить только первую форму и казначейство второй формы, а остальные поля второй формы должны сохраняться автоматически (имя=имя, дата=дата, дебет=кредит, кредит=дебет). Кто-нибудь может помочь, заранее спасибо

МОДЕЛЬ :

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__"

VIEW:

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)
Вернуться на верх