добавление дополнительных полей в формы django-userena - PullRequest
7 голосов
/ 15 января 2012

Я использую django-userena.У меня есть модель под названием UserProfile.Я добавил дополнительные поля в форме регистрации.и эти поля отображаются правильно, но данные не сохраняются.Я хочу сохранить данные некоторых полей в другую модель (Business).Например, у меня есть два поля, например contact и business.Я хочу, чтобы поле контакта получило значение UserProfile Модель, а поле business - значение Business Model.какая-нибудь подсказка?Спасибо

Вот мой код

class SignupFormExtra(SignupForm):
    address = forms.CharField(label=_(u'Address'),max_length=30,required=False)
    contact = forms.CharField(label=_(u'Contact'),max_length=30,required=False)
    business = forms.CharField(label=_(u'Business Name'),max_length=30,required=False)

    def save(self):
        """
        Override the save method to save the first and last name to the user
        field.

        """

        user_profile = super(SignupFormExtra, self).save(commit=False)

        user_profile.address = self.cleaned_data['address']
        user_profile.contact = self.cleaned_data['contact']
        user_profile.business = self.cleaned_data['business']

        user_profile.save()

        return user_profile

ОБНОВЛЕНИЕ: Я сохраняю эти значения в экземпляре пользователя ... Я хочу сохранить их в модели профиля - экземпляре, который привязан кПользователь

Ответы [ 2 ]

10 голосов
/ 16 января 2012

Автор Userena здесь.У меня уже была переписка по электронной почте с "no_access", но стоит указать решение, если у других есть такая же проблема.Первая ошибка состояла в том, что метод save возвращает профиль.Это не правда, он возвращает Django User.Из-за этого вам сначала нужно получить профиль и внести в него изменения.Сохраните профиль и затем верните пользователя снова, чтобы он был совместим с Userena.

Для модели Business просто добавьте его также в методе save.

class SignupFormExtra(SignupForm):
    address = forms.CharField(label=_(u'Address'),max_length=30,required=False)
    contact = forms.CharField(label=_(u'Contact'),max_length=30,required=False)
    business = forms.CharField(label=_(u'Business Name'),max_length=30,required=False)

    def save(self):
        """
        Override the save method to save the first and last name to the user
        field.

        """
        # Original save method returns the user
        user = super(SignupFormExtra, self).save()

        # Get the profile, the `save` method above creates a profile for each
        # user because it calls the manager method `create_user`.
        # See: https://github.com/bread-and-pepper/django-userena/blob/master/userena/managers.py#L65
        user_profile = user.get_profile()

        # Be sure that you have validated these fields with `clean_` methods.
        # Garbage in, garbage out.
        user_profile.address = self.cleaned_data['address']
        user_profile.contact = self.cleaned_data['contact']
        user_profile.save()

        # Business
        business = self.cleaned_data['business']
        business = Business.objects.get_or_create(name=business)
        business.save()

        # Return the user, not the profile!
        return user

Послесоздавая форму, не забудьте переопределить форму userena в вашем urls.py.Что-то вроде этого подойдет:

url(r'^accounts/signup/$',
        userena_views.signup,
        {'signup_form': SignupFormExtra}),

Это должно сработать!Удачи.

1 голос
/ 13 июня 2013

Я попробовал описанную выше уловку, и она, похоже, работает.Однако я сталкиваюсь с ошибкой и никогда не получаю функцию сохранения в моей установке.У меня есть этот параметр в моем файле настроек: USERENA_WITHOUT_USERNAMES = True Итак, когда я расширяю форму, добавляя новые поля, я никогда не получаю метод сохранения, потому что я получаю «поле обязательное», это для поля, которое я не использую (username).

Я вижу в представлении создания строку здесь:работает.Итак, если вы используете USERENA_WITHOUT_USERNAMES, создайте подкласс другой формы, если вы хотите изменить форму регистрации.

Я понимаю, что это не отвечает на этот вопрос (точно), но, скорее, делает: -)

-g

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...