ISSUE ON NOT NULL constraint failed: accounts_user.course_id

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

).

Вот мой model.py

*from django.db import models
from admin_dash.models import Course
from django.contrib.auth.models import (
BaseUserManager, AbstractBaseUser
)
class UserManager(BaseUserManager):
    def create_user(self,roll,phone,name,password=None):
        if not roll:
            raise ValueError('You Don't have Permission to do exam')
        user = self.model(
        roll=roll,
        phone=phone,
        name=name
    )
    user.set_password(password)
    user.save(using=self._db)
    return user
  def create_superuser(self,roll,phone,name, password):
       user = self.create_user(roll,phone,name,password=password)
       user.is_admin = True
       user.is_staff=True
       user.save(using=self._db)
       return user
class User(AbstractBaseUser):
    phone= models.CharField(verbose_name='phone number', max_length=12,unique=True)
    name=models.CharField(max_length=150,null=True)
    roll=models.CharField(max_length=20,verbose_name='roll',unique=True)
    course=models.ForeignKey(Course,on_delete=models.CASCADE)
    date_joind=models.DateTimeField(verbose_name='date joind', auto_now_add=True)
    is_active = models.BooleanField(default=True)
    is_admin = models.BooleanField(default=False)
    is_staff=models.BooleanField(default=False)
    USERNAME_FIELD = 'roll'
    REQUIRED_FIELDS = ['name','phone']
    objects = UserManager()
  def __str__(self):
      return self.name
  def has_perm(self, perm, obj=None):
     return self.is_admin

  def has_module_perms(self, app_label):
     return True*

Это мой файл admin.py

*from django.contrib import admin
from .import models
# Register your models here.
admin.site.register(models.User)*

При попытке создать суперпользователя я получил следующую трассировку

Заранее спасибо.

Вам необходимо добавить поле курса в REQUIRED_FIELDS вашей пользовательской модели пользователя:

class User(AbstractBaseUser):
    phone= models.CharField(verbose_name='phone number', max_length=12,unique=True)
    name=models.CharField(max_length=150,null=True)
    roll=models.CharField(max_length=20,verbose_name='roll',unique=True)
    course=models.ForeignKey(Course,on_delete=models.CASCADE)
    date_joind=models.DateTimeField(verbose_name='date joind', auto_now_add=True)
    is_active = models.BooleanField(default=True)
    is_admin = models.BooleanField(default=False)
    is_staff=models.BooleanField(default=False)
    USERNAME_FIELD = 'roll'
    REQUIRED_FIELDS = ['name','phone', 'course']
    objects = UserManager()

    def __str__(self):
        return self.name

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

    def has_module_perms(self, app_label):
        return True

Вам также необходимо изменить ваш пользовательский менеджер пользователей:

class UserManager(BaseUserManager):
    def create_user(self, phone, roll, course, password, name=None):
        if isinstance(course, int):
            course = Course.objects.get(pk=course)

        user = self.model(phone=phone, roll=roll, course=course, name=name)
        user.set_password(password)
        user.save()
        return user

    def create_superuser(self, phone, roll, course, password, name=None):
        user = self.create_user(phone=phone, roll=roll, course=course, password=password, name=name)
        user.is_staff = True
        user.is_admin = True
        user.save()
        return user

Теперь, когда вы выполняете команду python manage.py createsuperuser, она спрашивает вас о курсе (вам нужно вставить значение первичного ключа экземпляра Course, который вы хотите связать)

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