Во время тестирования менеджер недоступен [дубликат]
Я заменил модель User
на свою собственную модель User
. В ней используется стандартная UserManager
. У меня также есть CustomUserChangeForm
, который используется в моем UserAdmin
. Я установил AUTH_USER_MODEL = "accounts.User"
в настройках.
Это все работает нормально при обычном использовании сайта и админки через браузер. Тесты на моих представлениях, использующих пользовательскую модель User
, также работают нормально.
Только когда я пытаюсь запустить тест непосредственно на CustomUserChangeForm
, я получаю ошибку AttributeError: Manager isn't available; 'auth.User' has been swapped for 'accounts.User'
.
Что здесь происходит?
Тест:
from .forms import CustomUserChangeForm
from .models import User
def test_admin_user_change_form(self):
self.register_user()
self.register_user("email2@site.com", "username2")
user = User.objects.get(username="username")
# Test valid change
form = CustomUserChangeForm({ "username": "username3", "email": "email3@site.com" }, user)
self.assertTrue(form.is_valid())
# Test case insensitive username change
form = CustomUserChangeForm({ "username": "Username2" }, user)
self.assertFalse(form.is_valid())
# Test case insensitive email change
form = CustomUserChangeForm({ "email": "Email2@site.com" }, user)
self.assertFalse(form.is_valid())
Форма:
from .models import User
class CustomUserChangeForm(UserChangeForm):
def clean_username(self):
username = self.cleaned_data.get("username")
if username and self._meta.model.objects.exclude(id=self.instance.id).filter(username__iexact=username).exists():
self._update_errors(ValidationError({ "username": self.instance.unique_error_message(self._meta.model, ["username"]) }))
else:
return username
def clean_email(self):
return self.cleaned_data.get("email").lower()
Admin:
from django.contrib.auth.admin import UserAdmin
from .models import User
@admin.register(User)
class UserAdmin(UserAdmin):
# ...
form = CustomUserChangeForm
# ...
Ответы на этот вопрос и этот вопрос, похоже, не подходят/не работают.
Не уверен, почему эта тема была закрыта. Связанный вопрос отличается тем, что все работает нормально при обычном использовании. Только при автоматизированном тестировании я получаю ошибку. Ни один из ответов, представленных в этом вопросе, не решает мою проблему.