Как сохранить пользовательскую форму с отношением 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})