Назначение группы пользователю при регистрации - Django allauth - PullRequest
0 голосов
/ 28 мая 2020

Пытаюсь сменить авторизацию моего сайта с основной Django auth на allauth. Я создал настраиваемую форму RegistrationForm, основанную на стандартной форме RegistrationForm в allauth. Я добавил поле выбора на основе предварительно добавленных объектов Group в базу данных. Теперь я пытаюсь назначить пользователя в группу на основе выбора, который он делает в форме регистрации. Я переписываю метод регистрации, чтобы добавить выбор пользователя к пользователю в базе данных. Пользователь регистрируется, но не попадает ни в одну группу. Я застрял в том, как это решить.

forms.py:

class CustomSignupForm(SignupForm):
    user_group = forms.ModelChoiceField(queryset=Group.objects.exclude(name='admin').exclude(name='personeel'),
                                        widget=forms.RadioSelect,
                                        initial=('particulier')
                                        )
    first_name = forms.CharField(max_length=30, label='First Name')
    last_name = forms.CharField(max_length=30, label='Last Name')

    fields = ('user_group', )

    def signup(self, request, user):
        user.first_name = self.cleaned_data['first_name']
        user.last_name = self.cleaned_data['last_name']
        role = self.cleaned_data['user_group']
        group = role or None
        g = Group.objects.get(name=group)
        user.groups.add(g)
        user.save()
        return user

settings.py

ACCOUNT_FORMS = {
    'signup': 'users.forms.CustomSignupForm',
}

Имя и фамилия правильно назначены правым полям в пользовательском экземпляре. Ролевая переменная в методе регистрации должна возвращать выбранное значение поля выбора («zakelijk» или «specificulier»). Затем переменная g указывает это значение на group.name, и значение g добавляется.

Я что-то здесь упускаю?

1 Ответ

0 голосов
/ 30 июля 2020

Сохранение нового пользователя из формы регистрации в базу данных немного отличается в Django Allauth, чем в общей c Django системе аутентификации. Allauth использует DefaultAccountAdapter для обработки logi c.

Чтобы прояснить вышеупомянутый вопрос, см. Мой другой вопрос .

...