Лучший способ обновить несколько шаблонов на основе отправки формы?

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

variables_input.html

{% block content %}
<form action="" method="post">
  {% csrf_token %}
  {{ form.as_p }}
  <input type="submit" , value="Submit" name="prior_run">
</form>

<form action="" method="post">
  <h2>Variables Table One</h2>

  {% csrf_token %}
  <!-- Table Columns -->
  <table>
    <table class="vartable" style="text-align: center;">
      <colgroup>
        <col class="grey">
      </colgroup>
      <thead>
        <tr>
          <th>Variable 1</th>
          <th>Variable 2</th>
          <th>Variable 3</th>
          <th>Variable 4</th>
          <th>Run Name</th>
          <th></th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <div>
            <td><input type="text" value="{{inputs_list.0}}" name="var_one"></td>
            <td><input type="text" value="{{inputs_list.1}}" name="var_two"></td>
            <td><input type="text" value="{{inputs_list.2}}" name="var_three"></td>
            <td><input type="text" value="{{inputs_list.3}}" name="var_four"></td>
            <td><input id="run_name" type="text" value="{{inputs_list.5}}" name="run_name"></td>
          </div>
        </tr>
        <tr>
          <td></td>
          <td></td>
          <td></td>
          <td></td>
          <td></td>
        </tr>
      </tbody>
    </table>
  </table>

forms.py

class InputsForm(forms.Form):
    past_run_names = [
        (i["run_name"], i["run_name"])
        for i in InputVariables.objects.values("run_name")
    ]
    run_name = forms.ChoiceField(choices=past_run_names)

views.py

class VariableInputView(FormView, View, LoginRequiredMixin):
    template_name = "variable_input.html"
    input_model = InputVariables
    inputs_form_class = InputsForm

    def get(self, request):
       # perform get method

    def post(self, request):
        post_data = request.POST.dict()
            if "prior_run" in request.POST:
                form = self.inputs_form_class(request.POST)
                if form.is_valid():
                   inputs_query = self.input_model.objects.filter(
                       run_name=run_name
                   ).values_list(*first_assumptions_list)
                   inputs_list = list(inputs_query[0])
                   return HttpResponseRedirect(self.request.path_info)
                return render(
                    request,
                    self.template_name,
                    {
                        "inputs_list": inputs_list,
                        "form": form,
                    },
                )
            else:
                 # run the calculation

class BasicTableView(View, LoginRequiredMixin):
    model = None
    template_name = None

    def get(self, request):
        """
        Get the latest entry in the database when the last time the table was
        generated.
        """
        if not request.user.is_authenticated:
            return redirect("/accounts/login")
        else:
                input_var_query = InputVariables.objects.values_list(
                    "var_one",
                    "var_two",
                    "var_three",
                    "var_four",
                    "run_name",
                ).latest("time_stamp")
                input_var_list = list(input_var_query)
                data = (
                    self.model.objects.filter(
                        input_variables__var_one=input_var_list[0],
                        input_variables__var_two=input_var_list[1],
                        input_variables__var_three=input_var_list[2],
                        input_variables__var_four=input_var_list[3],
                        input_variables__run_name=input_var_list[4],
                    )
                    .order_by("time_stamp")
                    .reverse()[: self.end_slice : -1]
                )
                print(data)
            except InputVariables.DoesNotExist:
                ...

            return render(
                request,
                self.template_name,
                {"data": data, "input_var_list": input_var_list},
            )
     

class SummaryOfResultsView(BasicTableView):
    model = SummaryOfResults
    template_name = "summary_of_results.html"

models.py

class SummaryOfResults(models.Model):
    result_one = models.TextField()
    result_two = models.TextField()
    result_three = models.TextField()
    input_variables = models.ForeignKey(InputVariables, on_delete=models.CASCADE)
    time_stamp = models.DateTimeField(auto_now_add=True, blank=True)

class InputVariables(models.Model):
    var_one = models.TextField()
    var_two = models.TextField()
    var_three = models.TextField()
    var_four = models.TextField()
    run_name = models.TextField()
    time_stamp = models.DateTimeField(auto_now=True, null=True)

    def __str__(self):
          # return strings

results.html

Пробовали ли вы использовать теги шаблонов?

вы пишете его один раз, но можете использовать его везде в шаблонах.

Я приведу вам пример:

register = template.Library()


@register.simple_tag(name='get_live_jobs')
def get_live_jobs():
    live_jobs = Job.objects.all().exclude(
        Q(is_deleted=True) | Q(last_date__lt=datetime.date.today()) | Q(is_archived=True)).count()
    return live_jobs

Тогда в своем шаблоне вы сделаете:

{% load get_general_counters %}
{% get_live_jobs %}
Вернуться на верх