Регистрационная форма с полем профиля - PullRequest
3 голосов
/ 06 января 2010

У меня простой вопрос. Это мой профиль:

class Profile(models.Model):

    user = models.ForeignKey(User, unique=True)
    born = models.DateTimeField('born to')    
    photo = models.ImageField(upload_to='profile_photo')

Я хочу создать форму регистрации с этими полями (из моделей User и Profile):

  • имя пользователя
  • first_name
  • last_name
  • родился
  • фото

Эти поля обязательны для заполнения.

Как мне это сделать?

Как get_profile() работает в шаблоне для этой проблемы?

Спасибо:)

1 Ответ

9 голосов
/ 06 января 2010

Настройка

Используете ли вы проекты django-profile и 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'),
...