Настройка
Используете ли вы django-profiles и django-registration? Если нет, значит, большая часть этого кода уже написана за вас.
Профиль
Код вашего профиля пользователя:
class Profile(models.Model):
user = models.ForeignKey(User, unique=True)
born = models.DateTimeField('born to')
photo = models.ImageField(upload_to='profile_photo')
Правильно ли вы настроили этот профиль в настройках Django? Вы должны добавить это, если нет, заменив yourapp
на имя вашего приложения:
AUTH_PROFILE_MODULE = "yourapp.Profile"
Регистрационная форма
django-registration
поставляется с некоторыми регистрационными формами по умолчанию, но вы указали, что хотите создать свои собственные. Каждое поле формы Django по умолчанию является обязательным, поэтому вам не нужно изменить это. Важной частью является просто обработка существующих полей регистрационной формы и добавление в создание профиля. Что-то вроде этого должно работать:
from django import forms
from registration.forms import RegistrationForm
from yourapp.models import Profile
from registration.models import RegistrationProfile
class YourRegistrationForm(RegistrationForm):
born = forms.DateTimeField()
photo = forms.ImageField()
def save(self, profile_callback=None):
new_user = RegistrationProfile.objects.create_inactive_user(username=self.cleaned_data['username'],
password=self.cleaned_data['password1'],
email = self.cleaned_data['email'])
new_profile = Profile(user=new_user, born=self.cleaned_data['born'], photo=self.cleaned_data['photo'])
new_profile.save()
return new_user
Объединяем
Вы можете использовать шаблоны и представления по умолчанию django-registration
, но захотите передать им свою форму в urls.py
:
from registration.backends.default import DefaultBackend
from registration.views import activate
from registration.views import register
# ... the rest of your urls until you find somewhere you want to add ...
url(r'^register/$', register,
{'form_class' : YourRegistrationForm, 'backend': DefaultBackend},
name='registration_register'),
person
Michael Greene
schedule
06.01.2010