Пытаюсь создать регистрационную форму, расширив приложение django-registration и используя Django Profile. Я создал модель и форму для профиля, и когда я проверил через оболочку django, он генерирует поля. Для полей профиля я использую ModelForm. Теперь я поражен тем, как объединить поля регистрации django и поля профиля. Ниже приведен код, который я разработал
model.py
class UserProfile(models.Model):
"""
This class would define the extra fields that is required for a user who will be registring to the site. This model will
be used for the Django Profile Application
"""
GENDER_CHOICES = (
('M', 'Male'),
('F', 'Female'),
)
#Links to the user model and will have one to one relationship
user = models.OneToOneField(User)
#Other fields thats required for the registration
first_name = models.CharField(_('First Name'), max_length = 50, null = False)
last_field = models.CharField(_('Last Name'),max_length = 50)
gender = models.CharField(_('Gender'), max_length = 1, choices=GENDER_CHOICES, null = False)
dob = models.DateField(_('Date of Birth'), null = False)
country = models.OneToOneField(Country)
user_type = models.OneToOneField(UserType)
address1 = models.CharField(_('Street Address Line 1'), max_length = 250, null = False)
address2 = models.CharField(_('Street Address Line 2'), max_length = 250)
city = models.CharField(_('City'), max_length = 100, null = False)
state = models.CharField(_('State/Province'), max_length = 250, null = False)
pincode = models.CharField(_('Pincode'), max_length = 15)
created_on = models.DateTimeField()
updated_on = models.DateTimeField(auto_now=True)
forms.py
class UserRegistrationForm(RegistrationForm, ModelForm):
#resolves the metaclass conflict
__metaclass__ = classmaker()
class Meta:
model = UserProfile
fields = ('first_name', 'last_field', 'gender', 'dob', 'country', 'user_type', 'address1', 'address2', 'city', 'state', 'pincode')
Теперь, что я должен сделать, чтобы смешать приложение django-registration с моим пользовательским приложением. Я просмотрел множество сайтов и ссылок, чтобы выяснить это, в том числе Django-Registration & Django-Profile, используя вашу собственную пользовательскую форму , но я не уверен, что буду двигаться вперед, тем более, что вместо этого я использую ModelForm.
ОБНОВЛЕНИЕ (26 сентября 2011 г.)
Я внес изменения, как предложено @VascoP ниже. Я обновил файл шаблона и затем из моего view.py создал следующий код
def register(request):
if request.method == 'POST':
form = UserRegistrationForm(request.POST)
if form.is_valid():
UserRegistrationForm.save()
else:
form = UserRegistrationForm()
return render_to_response('registration/registration_form.html',{'form' : form}, context_instance=RequestContext(request))
После следующего изменения форма корректно отображается, но проблема в том, что данные не сохраняются. Пожалуйста, помогите мне.
ОБНОВЛЕНИЕ (27 сентября 2011 г.)
UserRegistrationForm.save () был изменен на form.save (). Обновлен код для views.py:
def register(request):
if request.method == 'POST':
form = UserRegistrationForm(request.POST)
if form.is_valid():
form.save()
else:
form = UserRegistrationForm()
return render_to_response('registration/registration_form.html',{'form' : form}, context_instance=RequestContext(request))
Даже после обновления пользователь не сохраняется. Вместо этого я получаю ошибку
У объекта 'super' нет атрибута 'save'
Я вижу, что в классе RegistrationForm нет метода сохранения. Так что мне теперь делать, чтобы сохранить данные? Пожалуйста, помогите