Ошибка при создании миграций, отношения для пользовательского пользователя
Сейчас я нахожусь в середине этого проекта, и команда makemigration выдает ошибку. Ранее я использовал команду migrated, но она работала нормально. Строка ошибки, которую она показывает, была добавлена раньше и тоже была успешно перенесена. Вот ошибка
Вот моя модель. Ошибка в generate_vid() не проявлялась ранее, и она также прошла тестовый код. Функция generate_vid() возвращает 10-значное уникальное шестнадцатеричное число в строковом формате, хотя ig.
from django.utils.translation import ugettext_lazy as _
from django.db import models
from django.utils.crypto import get_random_string
from django.db import models
from django.contrib.auth.models import(
BaseUserManager,
AbstractBaseUser,
PermissionsMixin,
)
class UserManager(BaseUserManager):
"""Model for user manager"""
def create_user(self, username, password, **params):
"""Create and return a user"""
u_type = params.pop('usertype')
p_username = params.pop('parent_username', 0)
if(u_type=='v'):
params.update({'parent_id': 0})
else:
parent_id = User.objects.get(username = p_username).first()['parent_id']
params.update({'parent_id': parent_id})
user = self.model(username=username, **params)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, username, password, **params):
"""Create and return a user"""
params.setdefault('is_staff',True)
params.setdefault('is_superuser',True)
params.setdefault('is_active',True)
if params.get('is_staff') is not True:
raise ValueError(_('Superuser must have is_staff=True.'))
if params.get('is_superuser') is not True:
raise ValueError(_('Superuser must have is_superuser=True.'))
return self.create_user(username, password, **params)
def generate_vid():
"""Generates a vid for the users"""
not_unique = True
while not_unique:
vid = get_random_string(10, 'abcdefg0123456789')
if not User.objects.filter(v_id = vid).exists():
not_unique=False
return vid
class User(AbstractBaseUser, PermissionsMixin):
"""Models for user"""
v_id = models.CharField(
max_length=10,
default=generate_vid,
primary_key = True,
)
username = models.CharField(max_length=20, unique=True)
email = models.EmailField(blank=True, unique = True)
parent_id = models.ForeignKey('User', on_delete=models.SET_DEFAULT, default=0)
usertype = models.CharField(max_length=1, choices=[('f', 'family'), ('v', 'veteran')])
REQUIRED_FIELDS = ['usertype']
is_staff = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
USERNAME_FIELD = 'username'
objects = UserManager()
def __str__(self):
return self.username
У вас есть внешний ключ в классе User
к модели User
- возможно, именно эта круговая ссылка вызывает проблему. Документация Django очень полезна для создания пользовательских моделей:
https://docs.djangoproject.com/en/4.0/topics/auth/customizing/#a-full-example