мой проект django работал хорошо, пока я не изменил свою базу данных с SQLite на PostgreSQL.Тогда весь беспорядок начался.Я решаю проблемы постепенно, один за другим.
К сожалению, я столкнулся с чем-то, что не знаю, как решить.
Я использую пакет django-username-email.До перехода на PostgreSQL все работало без проблем.Теперь, когда я пытаюсь зарегистрировать пользователя, я получаю сообщение об ошибке:
[01/Oct/2018 09:17:06] "GET /accounts/signup/ HTTP/1.1" 200 5530
Internal Server Error: /accounts/signup/
Traceback (most recent call last):
File "/Users/Kuba/anaconda3/envs/MyDjangoEnv/lib/python3.6/site-packages/django/core/handlers/exception.py", line 35, in inner
response = get_response(request)
File "/Users/Kuba/anaconda3/envs/MyDjangoEnv/lib/python3.6/site-packages/django/core/handlers/base.py", line 128, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/Users/Kuba/anaconda3/envs/MyDjangoEnv/lib/python3.6/site-packages/django/core/handlers/base.py", line 126, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/Kuba/anaconda3/envs/MyDjangoEnv/lib/python3.6/site-packages/django/views/generic/base.py", line 69, in view
return self.dispatch(request, *args, **kwargs)
File "/Users/Kuba/anaconda3/envs/MyDjangoEnv/lib/python3.6/site-packages/django/views/generic/base.py", line 89, in dispatch
return handler(request, *args, **kwargs)
File "/Users/Kuba/anaconda3/envs/MyDjangoEnv/lib/python3.6/site-packages/django/views/generic/edit.py", line 172, in post
return super().post(request, *args, **kwargs)
File "/Users/Kuba/anaconda3/envs/MyDjangoEnv/lib/python3.6/site-packages/django/views/generic/edit.py", line 141, in post
if form.is_valid():
File "/Users/Kuba/anaconda3/envs/MyDjangoEnv/lib/python3.6/site-packages/django/forms/forms.py", line 179, in is_valid
return self.is_bound and not self.errors
File "/Users/Kuba/anaconda3/envs/MyDjangoEnv/lib/python3.6/site-packages/django/forms/forms.py", line 174, in errors
self.full_clean()
File "/Users/Kuba/anaconda3/envs/MyDjangoEnv/lib/python3.6/site-packages/django/forms/forms.py", line 378, in full_clean
self._post_clean()
File "/Users/Kuba/anaconda3/envs/MyDjangoEnv/lib/python3.6/site-packages/django/contrib/auth/forms.py", line 106, in _post_clean
super()._post_clean()
File "/Users/Kuba/anaconda3/envs/MyDjangoEnv/lib/python3.6/site-packages/django/forms/models.py", line 401, in _post_clean
self.instance.full_clean(exclude=exclude, validate_unique=False)
File "/Users/Kuba/anaconda3/envs/MyDjangoEnv/lib/python3.6/site-packages/django/db/models/base.py", line 1151, in full_clean
self.clean()
File "/Users/Kuba/anaconda3/envs/MyDjangoEnv/lib/python3.6/site-packages/cuser/models.py", line 86, in clean
self.email = self.__class__.objects.normalize_email(self.email)
AttributeError: 'Manager' object has no attribute 'normalize_email'
[01/Oct/2018 09:17:20] "POST /accounts/signup/ HTTP/1.1" 500 104567
Это не происходит, когда я регистрируюсь как суперпользователь через командную строку.Тогда все в порядке.
Исходный код файла django-username-email, в котором возникает проблема: здесь , а часть, в которой возникла ошибка:
objects = CUserManager()
...
def clean(self):
super().clean()
self.email = self.__class__.objects.normalize_email(self.email)
Это не сильно отличается от того, что появляется в исходном коде django
objects = UserManager()
...
def clean(self):
super().clean()
self.email = self.__class__.objects.normalize_email(self.email)
Честно говоря, я полностью потерян.Я понятия не имею, что не так с моим кодом.Я даже не знаю, что-то не так с моим кодом, пакетом django-username-email или django в целом.В моем случае переход на PostgreSQL из SQLite - это ужасно ...
account / templates / accounts / signup.html
{% extends "accounts/base_user.html" %}
{% block main_part %}
<h1>Sign Up</h1>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" name="" value="Sign Up">
</form>
{% endblock %}
account / форм.py
from .models import User
from django.contrib.auth.forms import UserCreationForm
class CreateUser(UserCreationForm):
class Meta:
model = User
fields = ('email', 'nickname', 'password1', 'password2')
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
account / models.py
from django.db import models
from django.contrib import auth
from django.utils.text import slugify
from .managers import UserManager, RelationshipManager, FriendshipManager
# Create your models here.
class User(auth.get_user_model()):
nickname = models.CharField(max_length=127, unique=True)
slug = models.SlugField(allow_unicode=True, unique=True)
relationships = models.ManyToManyField('self',through='Relationship',
symmetrical=False,
related_name='related_to')
friendships = models.ManyToManyField('self', through='Friendship',
symmetrical=False,
related_name='friend_to+')
objects = models.Manager()
actions = UserManager()
def __str__(self):
return self.nickname
def save(self, *args, **kwargs):
self.slug = slugify(self.nickname)
super().save(*args, **kwargs)
accounts / views.py
class SignUp(CreateView):
template_name = 'accounts/signup.html'
form_class = forms.CreateUser
success_url = reverse_lazy('accounts:login')
settings.py
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 'debug_toolbar',
'cuser',
'accounts',
'groups',
'posts',
]
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'django',
'USER': 'postgres',
'PASSWORD': 'testpassword',
'HOST': 'localhost',
'PORT': '',
}
}
AUTH_USER_MODEL = 'cuser.CUser'
Я использую виртуальную среду Anaconda.Версии пакетов в среде:
- django 2.0.7
- python 3.6.4
- django-username-email 2.2.1