В более новых версиях Django создание собственной пользовательской модели пользователя довольно просто. Подробнее см. в этом ответе: https://stackoverflow.com/a/16125609/236195
Вы можете столкнуться с проблемами, если используете некоторые старые сторонние приложения, отношения моделей которых жестко закодированы в auth.models.User
. Большинство сторонних приложений, которые находятся в стадии разработки, вероятно, уже перешли или сделают это в ближайшее время.
Изменить - заставить его работать с django-registration
myapp/models.py:
from django.contrib.auth.models import AbstractUser
from django.db import models
from django.utils.translation import ugettext_lazy as _
class CustomUser(AbstractUser):
age = models.PositiveIntegerField(_("age"), null=True) # this field is added to default User model
settings.py:
INSTALLED_APPS = (
# ...
'registration_defaults',
'registration',
'myapp',
)
# ...
AUTH_USER_MODEL = "myapp.CustomUser"
ACCOUNT_ACTIVATION_DAYS = 2 # or something
urls.py (добавьте эту строку):
url(r'^accounts/', include('registration.backends.default.urls')),
myapp/admin.py (необязательно):
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.utils.translation import ugettext_lazy as _
from .models import CustomUser
class CustomUserAdmin(UserAdmin):
fieldsets = (
(None, {'fields': ('username', 'password')}),
(_('Personal info'), {'fields': ('first_name', 'last_name', 'email', 'age')}), # added "age" field
(_('Permissions'), {'fields': ('is_active', 'is_staff', 'is_superuser',
'groups', 'user_permissions')}),
(_('Important dates'), {'fields': ('last_login', 'date_joined')}),
)
admin.site.register(CustomUser, CustomUserAdmin)
django-регистрация
Получите его отсюда: https://bitbucket.org/fhrzenjak/django-registration и поместите это в папке вашего проекта.
Отказ от ответственности: это моя вилка оригинального репозитория регистрации django с примененным патчем для пользовательских моделей от mrginglymus: https://bitbucket.org/ubernostrum/django-registration/pull-request/30/django-15-совместимость-с-настраиваемым-пользователем/diff
Django-registration-defaults — это набор шаблонов по умолчанию отсюда: https://github.com/yourcelf/django-registration-defaults Его можно установить с помощью pip
РЕДАКТИРОВАТЬ 2 - принять настраиваемое поле при регистрации
Ну это отдельный вопрос, но ладно вот как...
Создайте форму MyRegistrationForm
:
from registration.forms import RegistrationForm
class MyRegistrationForm(RegistrationForm):
age = forms.CharField(required=False)
В вашем urls.py добавьте строку перед django-registration include
. Это переопределит все, что включено:
url(r'^accounts/register/$',
RegistrationView.as_view(form_class=MyRegistrationForm),
name='registration_register',
),
url(r'^accounts/', include('registration.backends.default.urls')),
Измените пользовательскую модель пользователя, чтобы она реагировала на сигнал user_registered
, и сохраните дополнительные данные:
class CustomUser(AbstractUser):
age = models.PositiveIntegerField(_("age"), null=True)
@classmethod
def user_created(cls, sender, user, request, **kwargs):
from myapp.forms import MyRegistrationForm
form = MyRegistrationForm(request.POST)
user.age = form.data.get('age', None)
user.save()
pass
from registration.signals import user_registered
user_registered.connect(CustomUser.user_created)
person
frnhr
schedule
21.03.2014