Попытка сделать форму с 2 входами

У меня есть две различные формы на странице регистрации, так как отношения один к одному в одной из моделей отображают выпадающее поле, поэтому я использую поле второй модели, где пользователь должен ввести поле.

Как мне сделать так, чтобы когда формы действительны, 'SNI' сохранялся в первой форме, а не во второй.

Модель

from asyncio import FastChildWatcher
import email
from pyexpat import model
from xxlimited import Null
from django.db import models
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager

class userCouncil(BaseUserManager):

    def create_user(self, userID, password=None):
        if not email:
            raise ValueError("Email is required")
        user = self.model(userID = self.normalize_email(userID))
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, userID, password):
        user = self.model(userID = self.normalize_email(userID))
        user.set_password(password)
        user.is_staff = True
        user.is_admin = True
        user.save(using=self._db)
        return user



             

class sni(models.Model):
    SNI = models.CharField(max_length=256, primary_key=True)
    Used = models.IntegerField(null=True, blank=True)
    password = None
    USERNAME_FIELD = 'SNI'

    def __str__(self):
        return self.SNI

class Account(AbstractBaseUser):
    userID = models.EmailField(primary_key= True ,max_length=256, unique=True)
    name = models.CharField(max_length=100)
    dateOfBirth = models.DateField(max_length=8, null=True)
    homeAddress = models.CharField(max_length=100, null=True)
    is_staff = models.BooleanField(default=False)
    is_admin = models.BooleanField(default=False)
    sni = models.OneToOneField(sni, on_delete=models.CASCADE, null=True, blank=True)

    USERNAME_FIELD = 'userID'

    objects = userCouncil()

    def __str__(self):
        return self.userID


    def has_perm(self, perm, obj=None):
        return self.is_admin

    def has_module_perms(self, app_label):
        return True

Forms

import email
from pprint import isreadable
from pyexpat import model
from statistics import mode
from tabnanny import check
from xxlimited import Null
from attr import field
from django.forms import ModelForm, forms, widgets
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth import authenticate
from matplotlib import use
from matplotlib.style import context

from .models import Account, sni

class createUserForm(UserCreationForm):
    class Meta:
        model = Account
        fields = ['userID','name','dateOfBirth','homeAddress','password1','password2', 'sni']


    def clean_userID(self):
        userID = self.cleaned_data['userID'].lower()
        u = self.cleaned_data['userID']
        check_existing = Account.objects.filter(userID=userID).exists()
        if check_existing:
            raise forms.ValidationError("The following userID already exists: " + u)
        else:
            return userID


class SNIForm(UserCreationForm):
    class Meta:
        model = sni
        fields = ['SNI', 'Used']


class AccountAuthenticationForm(forms.ModelForm):
    password = forms.CharField(label = "password", widget = forms.PasswordInput)

    class Meta:
        model = Account
        fields = ('userID', 'password')

Виды

from django.shortcuts import redirect, render
from django.http import HttpResponse
from matplotlib import use
from matplotlib.pyplot import get
from matplotlib.style import context
from werkzeug import Request
from .models import *
from django.contrib.auth.hashers import make_password, check_password
from django.contrib.auth.forms import UserCreationForm
from django.contrib import messages
from django.contrib.auth import authenticate
from django.contrib.auth import login as dj_login
from django.forms import ModelForm, forms
from django.contrib.auth.decorators import login_required

from .forms import AccountAuthenticationForm, SNIForm, createUserForm

def login(request):
    context = {}
    if request.method == 'POST':
        username = request.POST.get('username').lower()
        password = request.POST.get('password')
        user = authenticate(request, userID = username, password = password)
        form = AccountAuthenticationForm(request.GET)
        if user is not None:
            dj_login(request, user)
            return redirect('dashboardPage')
        else:
            messages.info(request, "userID or password is incorrect")
    return render(request, 'base.html', context)

def registerPage(request):
    form = createUserForm()
    form2 = SNIForm()
    if request.method == 'POST':
        form = createUserForm(request.POST)
        form2 = SNIForm(request.POST)
        if form.is_valid() and form2.is_valid:
            print(form2['SNI'].value)
            form.save()
            form2.save()
            userID = form.cleaned_data.get('userID')

            messages.success(request, "Account created for: " + userID)
            return redirect('loginPage')
    
    context = {'form' : form, 'form2' : form2}
    return render(request, 'register.html', context)


@login_required(login_url='loginPage')
def dashboardPage(request):
    context = {}

    return render(request, 'dashboard.html', context)

В представлениях, пожалуйста, обратитесь к функции registerPage. Спасибо

Первая форма может принимать вид Sni_id. Не существует sni_id без предварительного сохранения экземпляра sni.

Что вы можете сделать... Сохранить обе формы

f=form.save()
f2=form2.save()
f2.instance.user = f.instance.id
Вернуться на верх