Как сохранить данные двух форм в одном представлении/шаблоне/странице?

У меня есть две формы и два представления, использующие один и тот же шаблон profile.html. Когда я GET/POST отправляю в ProfileUpdateView, все данные профиля пользователя присутствуют. Однако, когда я отправляю сообщение в UserDeleteView и не выбираю поле "accountActivation", страница отображается, но данные профиля пользователя, которые находятся выше, пусты.

# urls.py

from django.contrib import admin
from django.urls import include, path

from apps.iam.views import ProfileUpdateView, UserDeleteView

urlpatterns = [
    path("accounts/profile", ProfileUpdateView, name="profile_detailupdate"),
    path("accounts/delete", UserDeleteView, name="user_delete"),
]
# views.py

import zoneinfo

from django.contrib.auth import get_user_model
from django.contrib.auth import logout as auth_logout
from django.contrib.auth.decorators import login_required
from django.shortcuts import HttpResponseRedirect, get_object_or_404, render
from django.utils import timezone
from django.views.decorators.http import require_http_methods
from django.views.generic import TemplateView, UpdateView

from .forms import ProfileForm
from .models import Profile

User = get_user_model()


# Homepage
class HomeDetailView(TemplateView):
    template_name = "home.html"

# Profile

## Update
@login_required
@require_http_methods(["GET","POST"])
def ProfileUpdateView(request):
    # dictionary for initial data with field names as keys
    context = {}

    # fetch the object related to passed id
    profile_object = get_object_or_404(Profile, id=request.user.id)

    # pass the object as instance in form
    profile_form = ProfileForm(request.POST or None, instance=profile_object)
 
    # save the data from the form
    if profile_form.is_valid():
        profile_form.save()

    # add form dictionary to context
    context["profile_form"] = profile_form

    # activate the new timezone in case changed
    request.session["django_timezone"] = request.user.profile.timezone
    timezone.activate(zoneinfo.ZoneInfo(request.user.profile.timezone))

    return render(request, "profile.html", context)


## Delete
@login_required
@require_http_methods(["POST"])
def UserDeleteView(request):
    # dictionary for initial data with field names as keys
    context = {}

    # fetch the object related to passed id
    user_object = get_object_or_404(Profile, id=request.user.id)

    # pass the object as instance in form
    userdelete_form = ProfileForm(request.POST or None, instance=user_object)

    # add form dictionary to context
    context["userdelete_form"] = userdelete_form

    # user verified account deletion
    if request.POST.get("accountActivation") == "on":
        User = get_user_model()
        user_pk = request.user.pk
        auth_logout(request)
        User.objects.filter(pk=user_pk).delete()
        return render(request, "home.html", context)
    else:
        return render(request, "profile.html", context)

Проблема была в представлении, которое представлено ниже. Я добавил логику для сохранения формы, если она действительна, или чтения из базы данных, если нет. Если у кого-нибудь есть предложения по простому решению этой проблемы, было бы здорово.

Вернуться на верх