Как я могу добавлять пользователей в разные группы, не используя AdminDjango - PullRequest
0 голосов
/ 05 апреля 2019

Как я могу добавлять пользователей в разные группы без использования администратора, я понимаю, что у меня есть три типа пользователей, которые выбирают, каким типом они хотят быть при регистрации, у меня уже есть группы, созданные с разными разрешениями, мой вопрос в том, что когда я создаю пользователей через номерной знак, я также добавляю их в группу, которая ему соответствует ???

это то, что было доказано до сих пор:

views.py

class FreeSignUpView(CreateView):
    model=CustomUser
    form_class = FreeSignUpForm
    template_name = 'registration/signup_form.html'

    def  get_context_data(self, **kwargs):
        kwargs['user_type']='free'
        return super().get_context_data(**kwargs)

    def form_valid(self, form):
        user=form.save()
        login(self.request,user)
        return redirect('free_signup')

forms.py

class FreeSignUpForm(UserCreationForm):
    pais = forms.ModelChoiceField(queryset=Pais.objects.all())
    anno = forms.ModelChoiceField(queryset=Profesion.objects.all())

    class Meta(UserCreationForm.Meta):
        model=CustomUser
        fields = ('username','email','first_name','last_name',)

    def clean_email(self):
        email = self.cleaned_data.get('email')
        qs = CustomUser.objects.filter(email=email)
        if qs.exists():
            raise forms.ValidationError("La direccion email ya existe")
        return email


    @transaction.atomic()
    def save(self, commit=True):
        user=super().save(commit=False)
        user.is_free=True

      #the error occurs when I try to add the user to the group
        group=Group.objects.get(name='free')
        group.user_set.add(user)

        if commit:
            user.save()
        return user

и мне выдаётся следующая ошибка введите описание изображения здесь

1 Ответ

0 голосов
/ 05 апреля 2019

Лучше всего создать сигнал django , который добавляет пользователей в группу при каждом создании пользователя.

def create_user_with_group(sender, instance, created, **kwargs):
    if created:
        instance.group = Group.objects.get(id=1) # replace this w/ however you add a user to your custom group
        instance.save()

post_save.connect(create_user_with_group, sender=User, dispatch_uid="create_user_with_group")

Подробнее: https://simpleisbetterthancomplex.com/tutorial/2016/07/28/how-to-create-django-signals.html

...