Django имеет проблему с добавлением пользователя в определенную группу

forms.py

class UserForm(UserCreationForm):
    email = forms.EmailField(required=True)

class Meta:
    model = User
    fields = ('username','email','password1','password2')

def save(self,commit=True):
    user = super(UserForm,self).save(commit=False)
    user.set_password = self.cleaned_data['password1']
    user.email = self.cleaned_data['email']
    
    if commit:
        user.save()

views.py

def register_view(request):
    form = UserForm()
    if request.method == 'POST':
        form = UserForm(request.POST)
        if form.is_valid():
            user = form.save()

            customer_group = Group.objects.filter(name='CUSTOMER').exists()
            if customer_group:
                Group.objects.get(name='CUSTOMER').user_set.add(user)
            else:
                Group.objects.create(name='CUSTOMER')
                Group.objects.get(name='CUSTOMER').user_set.add(user)
          
            messages.success(request,'註冊成功! 請按指示登入!')
            return redirect('login')
        else:
            messages.error(request,'註冊無效! 請再試過!')
    context = {'form':form}
    return render(request,'customer/register.html',context)

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

Как говорит @Iain Shelvington, метод form.save() должен возвращать объект пользователя. Но нет необходимости переопределять метод save(): UserCreationForm уже делает это.

class UserForm(UserCreationForm):
    email = forms.EmailField(required=True)

    class Meta:
        model = User
        fields = ('username','email')

    # no save method

В представлении вы можете упростить логику до:

def register_view(request):
    form = UserForm()
    if request.method == 'POST':
        form = UserForm(request.POST)
        if form.is_valid():
            user = form.save()
            customer_group, __ = Group.objects.get_or_create(name='CUSTOMER')
            customer_group.user_set.add(user)
          
            messages.success(request,'註冊成功! 請按指示登入!')
            return redirect('login')
        else:
            messages.error(request,'註冊無效! 請再試過!')
    context = {'form':form}
    return render(request,'customer/register.html',context)
Вернуться на верх