cosmos multi
cosmos multi

Reputation: 565

Error when trying to assign a group to a user

I am trying to assign a group to a user but without the need to use the django manager, but I run into a problem and it tells me that "<User: island>" must have a value for the field "id" before this many-to-many relationship can be used.
This is my view:

class UserCreationView(LoginRequiredMixin, PermissionRequiredMixin, SuccessMessageMixin, CreateView):
    permission_required = 'users.add_user'
    login_url = 'users:login'
    template_name = 'users/register.html'
    model = User
    form_class = UserForm
    success_message = 'El usuario fue creado exitosamente'
    success_url = reverse_lazy('users:user')

    def form_valid(self, form):
        self.object = form.save(commit=False)
        group = Group.objects.get(pk=self.request.POST.get('groups'))
        self.object.groups.add(group)
        self.object.save()

Upvotes: 0

Views: 77

Answers (1)

iklinac
iklinac

Reputation: 15748

Simply rearrange order of statements

    self.object = self.object.save()
    self.object.groups.add(group)

Also there is no need to add instance to object you can just use normal variable instead, and your parameter would be better called group/group_id instead of groups

   def form_valid(self, form):
        user = form.save()
        group = Group.objects.get(pk=self.request.POST.get('group_id'))
        user.groups.add(group)
        

Upvotes: 1

Related Questions