@3FANG

Как сохранить данные в полях формы при повторном запросе?

Есть вью, выводящая список задач и форму для фильтрации этих задач:
class IndexTasksView(PleaseLoginMixin, FormMixin, ListView):
    """Класс-представление, выводящий все задачи."""

    model = Tasks
    form_class = FilterTasksForm
    success_url = reverse_lazy('all_tasks')
    context_object_name = "tasks_list"
    template_name = "tasks/index.html"

    def get_queryset(self):
        """Берем параметры из строки запроса и фильтруем полученные задачи."""
        queryset = self.model._default_manager.all()
        status = self.request.GET.get('status')
        executor = self.request.GET.get('executor')
        if status:
            queryset = queryset.filter(status__id=status)
        if executor:
            queryset = queryset.filter(executor__id=executor)
        return queryset

Вот как выглядит форма:
class FilterTasksForm(forms.ModelForm):
    """Форма для фильтрации задач."""

    class Meta:
        model = Tasks
        fields = ["status", "executor"]

Шаблон
{% extends 'base.html' %}

{% load i18n %}
{% load django_bootstrap5 %}

{% block content %}
<main class="container flex-grow-1">
    <h1 class="my-4">{% translate 'Tasks' %}</h1>
    <a href="{% url 'create_task' %}" class="btn btn-primary mb-3" role="button">{% translate 'Create task' %}</a>

    <div class="card mb-3">
        <div class="card-body bg-light">
           <form method="get">
                {% bootstrap_form form %}
                <button type="submit" class="btn btn-primary">{% translate 'Show' %}</button>
            </form> 
        </div>
    </div>
    

    <table class="table table-striped">
        <thead>
            <tr>
                <th>ID</th>
                <th>{% translate 'Task name' %}</th>
                <th>{% translate 'Status' %}</th>
                <th>{% translate 'Author' %}</th>
                <th>{% translate 'Executor' %}</th>
                <th>{% translate 'Date of creating' %}</th>
                <th></th>
            </tr>
        </thead>
        <tbody>
            {% for task in tasks_list %}
            <tr class="align-baseline">
                <td>{{ task.id }}</td>
                <td><a href="{% url 'show_task' task.id %}">{{ task.name }}</a></td>
                <td>{{ task.status }}</td>
                <td>{{ task.author }}</td>
                <td>{{ task.executor|default_if_none:""}}</td>
                <td>{{ task.date_created }}</td>
                <td>
                    <a href="{% url 'update_task' task.id %}">{% translate 'Edit' %}</a>
                    <br>
                    <a href="{% url 'delete_task' task.id %}">{% translate 'Delete' %}</a>
                </td>
            </tr>
            {% endfor %}
        </tbody>
    </table>
</main>
{% endblock %}

А вот так выглядит сама страница:
660d6e647f45e648526791.png

При фильтрации, используя форму, я хочу, чтобы параметры, которые ты указываешь оставались при повторном запросе (т.е. после нажатия на кнопку Show и повторном запросе с указанными параметрами.)

Как здесь (при повторном запросе с параметрами фильтрации данные остались в форме):
660d6f8e944e8783418942.jpeg

А не как у меня (при повторном запросе с параметрами фильтрации форма стала пустой):
660d708822591267991025.jpeg

Как это реализовать?
  • Вопрос задан
  • 35 просмотров
Решения вопроса 1
@Everything_is_bad
использовать атрибут initial или метод get_initial https://docs.djangoproject.com/en/5.0/ref/class-ba...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы