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

Ссылка скопирована
1 ответ

Есть вью, выводящая список задач и форму для фильтрации этих задач:

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

    может быть можно или нужно было лаконичнее?

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Антон С. Ответ

Для сохранения данных в полях формы при повторном запросе на странице, можно воспользоваться несколькими способами. Один из наиболее распространенных способов - использование PHP для проверки наличия данных в полях формы и их вывода с помощью соответствующих функций.

Прежде всего, необходимо убедиться, что при отправке формы данные сохраняются в переменных. Для этого можно использовать метод POST или GET в форме, а затем получить эти данные на сервере с помощью суперглобальных массивов $_POST или $_GET.

Пример кода на PHP для сохранения данных в полях формы при повторном запросе:

 
    <input type="text" name="username" value="" />
    <input type="email" name="email" value="" />
    <textarea name="message"></textarea>

&lt;input type=&quot;text&quot; name=&quot;username&quot; value=&quot;" /&gt; &lt;input type=&quot;email&quot; name=&quot;email&quot; value=&quot;" /&gt; <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);
    });
});

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 при изменении их значений, и восстанавливает их при загрузке страницы. Таким образом, данные будут сохранены даже после обновления страницы или повторного запроса.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно