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):
Надеюсь, это сработает