Ну, я выяснил решение, хотя и грубое. Если у кого-то еще есть аналогичные проблемы в отношении добавления &, сэкономив дополнительные поля пользователя на странице регистрации, предоставленной django-registration 1.0, надеюсь, это будет некоторая помощь ... (хотя я не могу гарантировать, что это действительно сработает для вас)
1) Создайте новую модель пользователя в приложение, добавив дополнительные поля, пожалуйста:
# posts/models.py
from django.contrib.auth.models import AbstractUser
class eduuser(AbstractUser):
# Created USER_TYPE_CHOICES, omitted here due to length
user_type = models.CharField(max_length=3, choices=USER_TYPE_CHOICES)
2) добавить модель пользователя в файл настроек. Мое приложение происходит называться «должности», поэтому моя модель пользователя:
# appName/settings.py
AUTH_USER_MODEL = "posts.eduuser"
3) Отрегулируйте Джанго регистрацию, чтобы иметь дело с новой моделью пользователя. Я сделал изменения замечены here. Это не должно влиять на функциональность django-registration, если вы используете его с другим проектом.
4) Добавьте дополнительное поле (ы) в виде:
# posts/forms.py
from registration.forms import RegistrationForm
from django import forms
from django.forms import ModelForm
from .models import eduuser
class eduuserForm(forms.ModelForm):
"""
Get extra 'user_type' field to add to form for django-registration
"""
class Meta:
model = eduuser
fields = ('user_type',)
RegistrationForm.base_fields.update(eduuserForm.base_fields)
5) Переопределение RegistrationView. Я не совсем уверен, почему это необходимо, но я получаю ошибки без него. Я считаю, что это говорит: «Эй, модели, будьте готовы к лишнему полю». Это в основном копировать/вставить из регистрации/движков/по умолчанию/views.py, но с дополнительное поле добавлено
# posts/views.py
from registration.backends.default.views import RegistrationView
from registration import signals
from registration.models import RegistrationProfile
from django.contrib.sites.models import Site
from django.contrib.sites.models import RequestSite
class CustomRegistrationView(RegistrationView):
"""
Needed override this django-registration feature to have it create
a profile with extra field
"""
def register(self, request, **cleaned_data):
username, email, password, user_type = cleaned_data['username'], cleaned_data['email'], cleaned_data['password1'], cleaned_data['user_type']
if Site._meta.installed:
site = Site.objects.get_current()
else:
site = RequestSite(request)
new_user = RegistrationProfile.objects.create_inactive_user(
username, email, password, user_type, site)
signals.user_registered.send(sender=self.__class__,
user=new_user,
request=request)
return new_user
6) Обновление модели. Я сделал это, непосредственно редактируя модель регистрации django (так как это проект с одиноким волком, и это мое единственное использование), но НЕ делайте этого, если вы используете django-registration для чего-либо еще. Вы можете попробовать переопределить модель в своем приложении, которое я считаю. В любом случае, в регистрации/models.py я добавил дополнительное поле:
# registration/models.py
def create_inactive_user(self, username, email, password, user_type,
site, send_email=True):
"""
Create a new, inactive ``User``, generate a
``RegistrationProfile`` and email its activation key to the
``User``, returning the new ``User``.
By default, an activation email will be sent to the new
user. To disable this, pass ``send_email=False``.
"""
new_user = get_user_model().objects.create_user(username, email, password, user_type=user_type)
new_user.is_active = False
new_user.save()
registration_profile = self.create_profile(new_user)
if send_email:
registration_profile.send_activation_email(site)
return new_user
7) Обновление вас URLS файл:
#appName/urls.py
urlpatterns = patterns('',
url(r'^accounts/register/$', CustomRegistrationView.as_view(
form_class=RegistrationForm)),
)
Надеется, что кто, где получает некоторую пользу из этого. Счастливый Django-ing!