Ошибка при создании миграций, отношения для пользовательского пользователя

Сейчас я нахожусь в середине этого проекта, и команда 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

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