В по-новите версии на Django създаването на ваш собствен потребителски модел е доста безболезнено. Вижте този отговор за подробности: https://stackoverflow.com/a/16125609/236195
Може да се сблъскате с проблеми, ако използвате някои по-стари приложения на трети страни, които имат моделни връзки, твърдо кодирани на auth.models.User
. Повечето приложения на трети страни, които са в процес на разработка, вероятно вече са преминали или ще го направят скоро.
Редактиране - накарайте го да работи с django-регистрация
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-registration repo, с приложена корекция за персонализирани потребителски модели от mrginglymus: https://bitbucket.org/ubernostrum/django-registration/pull-request/30/django-15-compatibility-with-custom-user/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