Я новичок в django, и это может быть вопрос базового уровня для кого-то опытного, но любая помощь будет принята с благодарностью.
Я пытаюсь создать пользовательскую регистрационную форму для пользователя, используя пакет django-registration-redux. На данный момент у меня есть следующая реализация:
модели.ру:
from django.db import models
from django.contrib.auth.models import User
class MyUser(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
date_of_birth = models.DateField()
просмотров.py:
class UserProfileRegistration(RegistrationView):
success_url = '/'
form_class = UserProfileRegistrationForm
def register(self, form):
"""
Implement user-registration logic here.
"""
User = MyUser
user = User.objects.create_user(
username = form.cleaned_data['username'],
first_name = form.cleaned_data['first_name'],
last_name = form.cleaned_data['last_name'],
email=form.cleaned_data['email'],
password=form.cleaned_data['password1']
)
if not self.registration_allowed():
return redirect(self.disallowed_url)
return redirect(self.get_success_url(user))
формы.ру:
from registration.forms import RegistrationForm
from django import forms
from django.forms.extras import SelectDateWidget
import datetime
from .models import MyUser
class UserProfileRegistrationForm(RegistrationForm):
first_name = forms.CharField(max_length=15, label='First name')
last_name = forms.CharField(max_length=15, label='Last name')
date_of_birth = forms.DateField(label='Date of birth',
widget=SelectDateWidget(years=[y for y in range(1950,
datetime.datetime.now().year-17)],
attrs=({'style': 'width: 20%; display: inline-block;'})),)
class Meta:
model = MyUser
fields = ("email", 'first_name', 'last_name',
'date_of_birth')
urls.py
from .views import UserProfileRegistration
urlpatterns = [
url(r'^accounts/register/$', UserProfileRegistration.as_view(), name='registration_register'),
url(r'^accounts/', include('registration.backends.simple.urls')),
]
Во-первых, этот метод не выводит поле имени пользователя в регистрационной форме, и я не знаю, как этого добиться. На самом деле, я хотел бы сделать электронную почту USERNAME_FIELD для модели MyUser. Чтобы сделать это, где именно в рабочем процессе я должен это объявить? Самое главное, когда я runserver
с приведенным выше кодом, он выдает следующее исключение:
'Manager' object has no attribute 'create_user'
Возможно, мне придется наследоваться от класса AbstractBaseUser, чтобы менеджер мог получить доступ к методу create_user. Я не очень уверен, что это единственный выбор, который у меня есть. Могу ли я в любом случае расширить устаревшую аутентификацию пользователя django, чтобы выполнить вышеуказанное вместо реализации пользовательской аутентификации? Заранее спасибо.