Django переписывание представления функций в класс View UpdateView проблема с несколькими формами
Я пытаюсь переписать все мое приложение от функциональных представлений к представлениям класса. Сейчас я борюсь с UpdateView Я знаю, что он может принимать только один параметр FORM.
Но мне интересно, переписав код из тем (как у меня), как это сделать правильно и чтобы это работало. И есть ли смысл вмешиваться в замыслы разработчиков Django? Или просто оставить это представление как функцию представления?
Вот как выглядит сейчас views.py
@login_required
def edit_user_info(request):
user = get_object_or_404(User, id=request.user.id)
user_profile = get_object_or_404(UserProfile, profile=request.user)
if request.method == "POST":
user_form = UserForm(request.POST, instance=user)
profile_form = UserProfileForm(request.POST, instance=user_profile)
if user_form.is_valid() and profile_form.is_valid():
user_form.save()
profile_form.save()
messages.success(request, "Your profile is updated successfully")
return redirect(to="profile")
else:
user_form = UserForm(instance=user)
profile_form = UserProfileForm(instance=user_profile)
context = {
"user_form": user_form,
"profile_form": profile_form,
}
return render(request, "web/update_user_info.html", context)
forms.py
class UserForm(forms.ModelForm):
email = forms.EmailField(required=False,label="Updated email address if different",
widget=forms.TextInput(attrs={'class': 'form-control'}))
class Meta:
model = User
fields = ("email",)
class UserProfileForm(forms.ModelForm):
class Meta:
model = UserProfile
fields = ("about_user","user_photo",)
и что я хотел бы сделать с помощью UpdateView или другого класса View MultiModelFormView или TemplateView
Кроме того, я хотел бы оставить авто заполненные формы, с данными пользователя
Этот код ниже не работает
class EditUserView(MultiModelFormView):
form_classes = {
'user_form' : UserForm,
'profile_form' : UserProfileForm,
}
def get_success_url(self):
return reverse('profile')
def forms_valid(self, forms):
user = forms['user_form'].save(commit=False)
user_profile =forms['profile_form'].save(commit=False)
return super(EditUserView, self).forms_valid(forms)
user_update.html
{% extends "web/layout.html" %}
{% block body %}
<br>
{% load crispy_forms_tags %}
<div class="card">
<div class="card-header">
Update your profile info:
</div>
<div class="card-body">
<form method="POST">
{% csrf_token %}
<div class="form-group">
{{forms.user_form|crispy}}
{{forms.profile_form|crispy}}
OR
{{user_form|crispy}}
{{profile_form|crispy}}
</div>
<br>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>
</div>
{% endblock %}