如何在不使用AdminDjango的情况下将用户添加到不同的组

问题描述 投票:0回答:1

如何在不使用管理员的情况下将用户添加到不同的组,我知道我有三种类型的用户在注册时选择他们想要的类型,我已经创建了具有不同权限的组,我的问题是当我通过注册板创建用户时,我还将它们添加到对应的组中???

到目前为止,这已被证实:

views.朋友

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.朋友

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

它抛出以下错误enter image description here

django django-rest-framework
1个回答
0
投票

最好的办法是创建一个django signal,无论何时创建用户,都会将用户添加到组中。

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

© www.soinside.com 2019 - 2024. All rights reserved.