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, который вы хотите связать)