Django.core.exceptions.ImproperlyConfigured: AUTH_USER_MODEL ссылается на модель 'authentication.User', которая не была установлена

Я создаю приложение с аутентификацией. Мой проект докеризирован. Когда я запускаю сервер, все работает нормально, за исключением

authentication.User: (models.W042) Автосозданный первичный ключ, используемый, когда не определен тип первичного ключа, по умолчанию 'django.db.models.AutoField'.

.

Но когда я хочу запустить docker-compose exec web python3 manage.py makemigrations или docker-compose exec web python3 manage.py migrate, я получаю ошибку:

File "/usr/local/lib/python3.9/site-packages/django/contrib/auth/init.py", line 176, in get_user_model raise ImproperlyConfigured( django.core.exceptions.ImproperlyConfigured: AUTH_USER_MODEL ссылается на модель 'authentication.User', которая не была установлена

.

Я думал, что это указывает на поле settings.py AUTH_USER_MODEL, но у меня его нет.

Мой views.py:

def signup(request):
    if request.method == "POST":
        context = {'has_error': False, 'data': request.POST}
        email = request.POST.get('email')
        username = request.POST.get('username')
        password = request.POST.get('password')

        if len(password) < 6:
            messages.add_message(request, messages.ERROR,
                                 'Password should be at least 6 characters')
            context['has_error'] = True

        if not validate_email(email):
            messages.add_message(request, messages.ERROR,
                                 'Enter a valid email address')
            context['has_error'] = True

        if not username:
            messages.add_message(request, messages.ERROR,
                                 'Username is required')
            context['has_error'] = True

        if models.User.objects.filter(username=username).exists():
            messages.add_message(request, messages.ERROR,
                                 'Username is taken, choose another one')
            context['has_error'] = True

            return render(request, 'authentication/signup.html', context)    # status=409

        if models.User.objects.filter(email=email).exists():
            messages.add_message(request, messages.ERROR,
                                 'Email is taken, choose another one')
            context['has_error'] = True

            return render(request, 'authentication/signup.html', context)   # status=409

        if context['has_error']:
            return render(request, 'authentication/signup.html', context)

        user = models.User.objects.create_user(username=username, email=email)
        user.set_password(password)
        user.save()

    return render(request, 'authentication/signup.html')

Мой models.py:

from django.db import models



class User(models.Model):
    email = models.EmailField(
        verbose_name='email address',
        max_length=255,
        unique=True,
    )

    username = models.CharField(
        max_length=200
    )
    def __str__(self):
        return self.email

Мой signup.html:

{% include  "_base.html" %}
{% load static %}

{% block title %}Sign Up{% endblock title %}

{% block content %}
<link rel="stylesheet" href="{% static 'css/authentication/signup.css' %}">
<div class="container">
  <form class="signup_form" method="post" action="{% url 'signup' %}">
    {% csrf_token %}
    <input type="text" placeholder="Email" class="input_1" name="email">
    <input type="text" placeholder="Username" class="input_2" name="username">
    <input type="text" placeholder="Password" class="input_3" name="password">
    <button type="submit" class="submit_btn">Sign Up</button>
  </form>
</div>
{% endblock content %}

_base.html - это просто navbar.

Для этого попробуйте добавить поле id в модель пользователя следующим образом

from uuid import uuid4
id = models.UUIDField(primary_key=True, editable=False, default=uuid4)

Также в вашей модели пользователя добавьте это в класс

from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser):

Я советую вам также изменить имя класса User на CustomUser, чтобы избежать столкновений с внутренним бэкендом django, это будет.

From

class User(models.Model):

to

class CustomUser(AbstractUser):

Надеюсь, это сработает

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