Как сохранить пользовательскую форму с отношением ManyToMany

Я новичок в django и пытаюсь создать веб-приложение. Я пытаюсь сохранить форму пользователя, но у меня есть проблема, что она не сохраняет в базе данных отношения ManyToMany групп в таблице user_user_groups

Моя модель

 class User(AbstractUser):
   state = models.BooleanField(default=True)

 def __str__ (self):
    return '{}'.format(self.username,self.state,self.groups)

Моя форма

from django.contrib.auth.models import Group

class UserForm(UserCreationForm):
  username = forms.CharField(label="User",widget=forms.TextInput(attrs= 
  {"class":"form-control"}))
  state = forms.CheckboxInput()
  groups = forms.ModelMultipleChoiceField(queryset=Group.objects.all(),
  widget=forms.CheckboxSelectMultiple,required=True)
  password1 = forms.PasswordInput()
  password2 = forms.PasswordInput()

class Meta:
    model = User
    fields = [
        "username",
        "password1",
        "password2",
        "state",
        "groups"
        ]

Мое мнение

 def create_user(request):
 if request.method == 'POST':
    form = UserForm(request.POST)
    form.fields['username'].help_text = None
    form.fields['password1'].help_text = None
    form.fields['password2'].help_text = None
    if form.is_valid():
        form.save()
        return redirect('/')
    return render(request, 'user/user_form.html',{'form': form})
else:
    form = UserForm()

return render(request, 'user/user_form.html',{'form': form})

Попробуйте сохранить с помощью commit=False и затем добавить M2M отношение вручную. Но сначала проверьте, что возвращается в поле "группы"

def create_user(request):
    if request.method == 'POST':
        form = UserForm(request.POST)
        form.fields['username'].help_text = None
        form.fields['password1'].help_text = None
        form.fields['password2'].help_text = None
        if form.is_valid():
            created_user = form.save(commit=False)
            created_user.groups.add(form.fields["groups"])
            created_user.save()
            return redirect('/')
        
        return render(request, 'user/user_form.html',{'form': form})
    else:
        form = UserForm()

return render(request, 'user/user_form.html',{'form': form})

Добавьте этот код и он работает

def create_user(request):
 if request.method == 'POST':
    form = UsuarioForm(request.POST)
    if form.is_valid():
        form2=form.save(commit=False)
        form2.save()
        form.save_m2m()
        return redirect('/')
    return render(request, 'user/user_form.html',{'form': form})
else:   
    form = UsuarioForm()
return render(request, 'user/user_form.html',{'form': form})
Вернуться на верх