Регистрационная форма с полем профиля

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

class Profile(models.Model):

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

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

  • имя пользователя
  • имя
  • фамилия
  • рожденный
  • Фото

Эти поля являются обязательными.

Как я могу это сделать?

Как get_profile() работает в шаблоне для этой задачи?

Спасибо :)


person xRobot    schedule 06.01.2010    source источник


Ответы (1)


Настройка

Используете ли вы 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