Как сохранить данные в полях формы при повторном запросе?
Есть вью, выводящая список задач и форму для фильтрации этих задач:
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 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"] |
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 %} |
{% 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 %}
А вот так выглядит сама страница:
При фильтрации, используя форму, я хочу, чтобы параметры, которые ты указываешь оставались при повторном запросе (т.е. после нажатия на кнопку Show и повторном запросе с указанными параметрами.)
Как здесь (при повторном запросе с параметрами фильтрации данные остались в форме):
А не как у меня (при повторном запросе с параметрами фильтрации форма стала пустой):
Как это реализовать?
Дополнительно:
использовать атрибут initial или метод get_initial https://docs.djangoproject.com/en/5.0/ref/class-ba...
- Спасибо, работает.
Сделал так:def get_initial(self): """Возвращает исходные данные для формы.""" initial = { 'status': self.request.GET.get('status'), 'executor': self.request.GET.get('executor') } return initial
def get_initial(self): """Возвращает исходные данные для формы.""" initial = { 'status': self.request.GET.get('status'), 'executor': self.request.GET.get('executor') } return initial
может быть можно или нужно было лаконичнее?
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос



Для сохранения данных в полях формы при повторном запросе на странице, можно воспользоваться несколькими способами. Один из наиболее распространенных способов - использование PHP для проверки наличия данных в полях формы и их вывода с помощью соответствующих функций.
Прежде всего, необходимо убедиться, что при отправке формы данные сохраняются в переменных. Для этого можно использовать метод POST или GET в форме, а затем получить эти данные на сервере с помощью суперглобальных массивов $_POST или $_GET.
Пример кода на PHP для сохранения данных в полях формы при повторном запросе:
<input type="text" name="username" value="" /> <input type="email" name="email" value="" /> <textarea name="message"></textarea><input type="text" name="username" value="" /> <input type="email" name="email" value="" /> <textarea name="message"></textarea>
В данном примере, мы используем тернарный оператор для проверки наличия данных в переменных $_POST и выводим их в соответствующих полях формы. Таким образом, при повторном запросе данные будут сохранены в полях формы.
Также, можно использовать JavaScript для сохранения данных в локальном хранилище браузера и восстановления их при загрузке страницы. Для этого можно использовать localStorage или sessionStorage.
Например, для сохранения данных в localStorage:
document.addEventListener('DOMContentLoaded', function() { var username = document.querySelector('input[name="username"]'); var email = document.querySelector('input[name="email"]'); var message = document.querySelector('textarea[name="message"]'); if (localStorage.getItem('username')) { username.value = localStorage.getItem('username'); } if (localStorage.getItem('email')) { email.value = localStorage.getItem('email'); } if (localStorage.getItem('message')) { message.value = localStorage.getItem('message'); } username.addEventListener('input', function() { localStorage.setItem('username', username.value); }); email.addEventListener('input', function() { localStorage.setItem('email', email.value); }); message.addEventListener('input', function() { localStorage.setItem('message', message.value); }); });
Этот код сохраняет данные в полях формы в localStorage при изменении их значений, и восстанавливает их при загрузке страницы. Таким образом, данные будут сохранены даже после обновления страницы или повторного запроса.