Предложения по улучшению представления формы

Я создаю приложение, в котором пользователь вводит данные, а затем перенаправляется на страницу, которая показывает результаты, основанные на их вводе с помощью некоторых простых уравнений. Однако каждый раз, когда я обновляю страницу результатов, в базе данных сохраняется новый экземпляр модели.

Есть ли другой (более эффективный и действенный) способ передачи данных из этого представления в другое представление, где у меня есть доступ к экземпляру модели, отправленной через представление формы? Каков способ передачи данных формы в представление в Django?

Единственное ограничение - я не хочу аутентификации пользователя, поэтому использование self.request.user не подходит, если только это не может быть реализовано таким образом, чтобы не требовать от пользователей регистрации и входа.

Я все еще немного новичок в Django, поэтому любые указания на очевидные решения, которые я упускаю из виду, были бы очень признательны.

Это представление, которое обрабатывает форму модели:

def createcalculation(request):
form = CalcForm()

if request.method == 'POST':
    form = CalcForm(request.POST)
    if form.is_valid():
        item = form.save()
        m_data = get_object_or_404(Calculate, id=item.id)
        context = {'c_data': form.cleaned_data, 'm_data': m_data}
        return render(request, 'calc/res_ca.html', context)

context = {'c_form': form}
return render(request, 'calc/calc.html', context)

Рекомендуется всегда делать перенаправление после успешного POST. Ваш код должен выглядеть примерно так:

from django.shortcuts import get_object_or_404, render, redirect
from django.urls import reverse
...

def createcalculation(request):
    form = CalcForm()

    if request.method == 'POST':
        form = CalcForm(request.POST)
        if form.is_valid():
            item = form.save()
            m_data = get_object_or_404(Calculate, id=item.id)
            context = {
                'c_data': form.cleaned_data,
                'm_data': m_data
            }
            return redirect(reverse('app_name:view_name', kwargs=context))

    context = {'c_form': form}
    return render(request, 'calc/calc.html', context)

Вы можете передать только что созданный объект item также в контексте. Также следует изменить текст app_name и view_name в соответствии с вашей ситуацией.

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