Как отправить данные из двух форм в две таблицы в базе данных Django с помощью одного представления?

Я хочу отправить данные из двух форм в две таблицы в базе данных Django, но получаю ошибку "FOREIGN KEY constraint failed". Как я могу включить две формы в представление для отправки данных в таблицы базы данных?

Моими моделями являются модель User и

class Account(models.Model):
    def create_new_ref_number():
        not_unique = True
        while not_unique:
            unique_ref = random.randint(1000000000, 9999999999)
            if not Account.objects.filter(account_number=unique_ref):
                not_unique = False
        return str(unique_ref)

    user = models.ForeignKey(User, related_name='+', on_delete=models.CASCADE, default='0')
    DOB = models.DateField('DOB', max_length=20)
    address = models.CharField('Address', max_length=120)
    contact_number = models.CharField('Contact Number', max_length=120)
    ...
    account_number = models.CharField('Account Number', unique=True, max_length=20, null=False, editable=True, default=create_new_ref_number)
    
    ...
    current_balance = models.IntegerField('Balance', default=0, null=True)

    # transaction atomic allows to group changes in DB
    # if save operation will fail transaction creation will be also restored
    @transaction.atomic
    def apply_deposit(self, amount: int):

        # create new deposit transaction
        Trans.objects.create(
            user=self.user,
            amount=amount,
            account_number=self.account_number
            )
  
        # update balance
        self.current_balance += amount
        self.save()

    def __str__(self):
        return str(self.name)

Моими формами являются

class NewForm(ModelForm):
    class Meta:
        model = Account
        fields = ('DOB', 'address', 'contact_number', 'account_number')
        exclude = ['user', 'account_number']
        labels = {          
            'DOB': '',
            'address': '',
            'contact_number': '',
        }
        widgets = {         
            'DOB': forms.DateInput(attrs={'class':'form-control','placeholder':'Date of Birth: dd/mm/yyyy'}, format='%m/%d/%y'),
            'address': forms.TextInput(attrs={'class':'form-control','placeholder':'Address'}),
            'contact_number': forms.TextInput(attrs={'class':'form-control','placeholder':'Contact Number'})
            
        }

и

class RegisterUserForm(UserCreationForm):
    email = forms.EmailField()
    first_name = forms.CharField(max_length=50)
    last_name = forms.CharField(max_length=50)
    

    class Meta:
        model = User 
        fields = ('username', 'first_name', 'last_name', 'email', 'password1', 'password2')

Мое мнение таково

def register_user(request):
    submitted = False
    if request.method == "POST":
        
        register_form = RegisterUserForm(request.POST)
        account_form = NewForm(request.POST)
        

        if register_form .is_valid() and account_form.is_valid():
            register = register_form.save()
            account = account_form.save(False)
            account.register = register
            account.save()
            username = form.cleaned_data['username']
            password = form.cleaned_data['password1']
            user = authenticate(username=username, password=password)
            login(request, user)
            messages.success(request, ("Regisatration successful."))
            return redirect('home')

                
            
    else:
        register_form: RegisterUserForm()
        account_form: NewForm()
    
    register_form = RegisterUserForm
    account_form = NewForm      
    
    return render(request, 'authenticate/register_user.html', 
        {'register_form': register_form,
        'account_form' : account_form,
        'submitted':submitted,}
        )

Код, похоже, обрывается на account.save() с ошибкой. Кто-нибудь может помочь?

Вы можете попробовать написать второе представление, которое будет принимать только заявки из второй формы и перенаправлять обратно в предыдущее представление, например:

def my_view(request):
    if request.method == 'POST':
        # Do your stuff
    return redirect()

А затем укажите url к этому представлению в атрибуте action="" второй формы

Вернуться на верх