IntegrityError at /auth/userreg/ (1048, "Column 'user_id' cannot be null")

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

authenticate.models

from django.db import models
from django.contrib.auth.models import AbstractUser
from django.contrib.auth.models import User
# Create your models here.

class User(AbstractUser):
    is_user = models.BooleanField('user', default=False)
    is_doctor = models.BooleanField('doctor', default=False)
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)

class User_reg(models.Model):
    user = models.OneToOneField('User',on_delete=models.CASCADE, primary_key=True)
    fname = models.CharField(max_length=50,blank=False)
    lname = models.CharField(max_length=50,blank=False)
    email = models.EmailField(max_length=100,blank=False)
    address = models.TextField(max_length=500,blank=False)
    gender = models.CharField(max_length=7, blank=False)
    phone = models.CharField(max_length=12,unique=True,blank=False)
    Username = models.CharField(max_length=100,blank=False,unique=True)
    Userpassword = models.CharField(max_length=100,blank=False)

views.py

from django.shortcuts import render
from django.contrib import messages
# from django.contrib.auth.models import get_user_model
from django.contrib.auth.models import User
from authenticate_me.models import User_reg, dr_reg

def login(request):
    return render(request, 'user/login.html')

def register(request):
    if request.method == "POST":
        fname = request.POST.get('fname')
        lname = request.POST.get('lname')
        email = request.POST.get('email')
        address = request.POST.get('add')
        gender = request.POST.get('sex')
        phone = request.POST.get('phone')
        username = request.POST.get('uname')
        userpassword = request.POST.get('upass')
        register = User_reg(fname=fname,lname=lname,email=email,address=address,gender=gender,phone=phone,Username=username,Userpassword=userpassword)
        register.save()

        myuser = User.objects.create_user(username, email, userpassword)
        myuser.first_name = fname
        myuser.last_name = lname
        myuser.save()

        messages.success(request, 'Register successful')
        return render(request,'user/login.html')
    else:
        return render(request, 'user/register.html')  

setting

AUTH_USER_MODEL = "authenticate_me.User"

Вам следует сначала создать User, а затем User_reg объект так, чтобы можно было заполнить поле user объектом myuser.

def register(request):
    if request.method == 'POST':
        fname = request.POST.get('fname')
        lname = request.POST.get('lname')
        email = request.POST.get('email')
        address = request.POST.get('add')
        gender = request.POST.get('sex')
        phone = request.POST.get('phone')
        username = request.POST.get('uname')
        userpassword = request.POST.get('upass')

        myuser = User.objects.create_user(
            username, email, userpassword, first_name=fname, last_name=lname
        )
        User_reg.objects.create(
            fname=fname,
            lname=lname,
            email=email,
            address=address,
            gender=gender,
            phone=phone,
            Username=username,
            Userpassword=userpassword,
            user=myuser
        )
        messages.success(request, 'Register successful')
        return redirect('login')
    return render(request, 'user/register.html')

Однако иметь два объекта модели "странно" и немного "некрасиво", особенно если вы храните одинаковую информацию в обеих моделях. Это форма дублирования данных, что часто в конечном итоге затрудняет синхронизацию данных.

Хранение пароля в виде обычного текста также является серьезной проблемой безопасности: Django будет хешировать пароль в пользовательском режиме с помощью .create_user(…). Это не относится к тому, как вы храните его в вашей модели.

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

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