Как исправить ошибку "Manager isn't available; 'auth.User' has been swapped for 'users.MyUser'" при создании нового пользователя через встроенную форму UserCreationForm после расширения модели User и настройки новой модели MyUser в Django?
Для создания нового экземпляра модели User и сохранения его в расширенной модели MyUser с использованием CreateView в Django, вам нужно сначала создать соответствующие представления и шаблоны. 1. Создайте представление CreateView для создания нового пользователя: ```python from django.views.generic.edit import CreateView from django.contrib.auth.models import User from users.models import MyUser class UserCreateView(CreateView): model = User template_name = 'user_create.html' fields = '__all__' def form_valid(self, form): user = form.save(commit=False) my_user = MyUser(user=user, additional_field='value') # Подставьте нужные данные my_user.save() return super().form_valid(form) ``` 2. Создайте шаблон user_create.html для отображения формы создания пользователя: ```html <form method="post"> {% csrf_token %} {{ form.as_p }} <button type="submit">Create User</button> </form> ``` 3. Настройте маршрутизацию URL для вашего представления в файле urls.py: ```python from django.urls import path from .views import UserCreateView urlpatterns = [ path('user/create/', UserCreateView.as_view(), name='user_create'), ] ``` Теперь при посещении страницы `/user/create/` будет отображаться форма создания пользователя, которая сохранит данные в модели MyUser. Чтобы исправить ошибку "Manager isn't available; 'auth.User' has been swapped for 'users.MyUser'" при создании нового пользователя через встроенную форму UserCreationForm, вам нужно обновить аутентификационную настройку вашего приложения Django. 1. В файле settings.py вашего приложения укажите модель User как MyUser, добавив следующую строку: ```python AUTH_USER_MODEL = 'users.MyUser' ``` 2. Затем выполните миграции, чтобы обновить схему базы данных: ```bash python manage.py makemigrations python manage.py migrate ``` Теперь при использовании формы UserCreationForm Django будет использовать модель MyUser вместо стандартной модели User, и ошибка не должна возникать.
Если я правильно понял задачу, то как то так:
# MyUser from django.contrib.auth.models import AbstractUser from django.db import models class MyUser(AbstractUser): # ... class Meta: swappable = 'AUTH_USER_MODEL'
# MyUserCreationForm from django import forms from django.contrib.auth.forms import UserCreationForm from .models import MyUser class MyUserCreationForm(UserCreationForm): class Meta: model = MyUser fields = ('username', 'password1', '...')
# view from django.urls import reverse_lazy from django.views.generic.edit import CreateView from .forms import MyUserCreationForm from .models import MyUser class MyUserCreateView(CreateView): model = MyUser form_class = MyUserCreationForm template_name = 'registration/registration_form.html' success_url = reverse_lazy('blog:index')
# urls from django.urls import path, include from .views import MyUserCreateView urlpatterns = [ path('auth/', include('django.contrib.auth.urls')), path('auth/registration/', MyUserCreateView.as_view(), name='registration'), ]