Как перенаправить на URL при использовании модальных форм в Django - PullRequest
0 голосов
/ 11 января 2019

Наличие модели (ProductSerialNumbers), которая имитирует продукт с серийным номером и после успешной реализации цикла CRUD с помощью модальных форм fm https://github.com/django-fm/django-fm

Я сталкиваюсь с проблемой неудачного перенаправления на другой URL после успешного удаления объекта. Приложение продолжает показ модального окна FM после нажатия ОК (для удаления).

Как я могу решить, что перенаправить в мой список ProductSerialNumbers?

Вот мой код представления и часть моего шаблона, касающаяся модального удаления.

вид

class ProductSerialNumbersDeleteView(LoginRequiredMixin, AjaxDeleteView):
    model = ProductSerialNumbers
    success_url = reverse_lazy('warehouse_stuffing')

    '''Function for deleting only the ProductSerialNuumbers which belong to an order, otherwise can not delete '''
    # Patch queryset to get the productSerialNumber
    def delete(self, request, *args, **kwargs):
        self.object = self.get_object()
        if (self.object.order):
            print("It belongs to an order, do not delete")
            return redirect('/warehouse_stuffing/')
        else:
            print("It is not in an order,delete")
            self.object.delete()
            print(self.success_url)
            return redirect('/warehouse_stuffing/')

кажется, что функция redirect () не работает должным образом.

шаблон

 <td><a href="{% url 'warehouse_stuffing_delete' products_with_serial_numbers.id %}" class="fm-delete" data-fm-head="Delete of entry {{ products_with_serial_numbers }};" data-fm-callback="reload" ><button class="btn btn-danger btn-sm" type="">Delete</button></a></td>

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Наконец, после поиска я вышел с этим решением:

view.py

class ProductSerialNumbersDeleteView(LoginRequiredMixin, AjaxDeleteView):
    model = ProductSerialNumbers
    success_url = reverse_lazy('warehouse_stuffing')

    def delete(self, request, *args, **kwargs):
        self.object = self.get_object()
        if (self.object.order):
            return self.render_json_response(self.get_success_result())

        else:
            self.object.delete()
            return self.render_json_response(self.get_success_result()) 

и в моем шаблоне, что касается fm-delete, структура:

<td><a href="{% url 'warehouse_stuffing_delete' products_with_serial_numbers.id %}" class="fm-delete" data-fm-head="Delete of entry {{ products_with_serial_numbers }};" data-fm-callback="redirect" data-fm-target="{% url 'warehouse_stuffing' %}"><button class="btn btn-danger btn-sm" type="">Delete</button></a></td>

в итоге возврат должен быть:

return self.render_json_response(self.get_success_result())

и модальное удаление должно быть:

data-fm-callback="redirect" data-fm-target="{% url 'url_name' %}"
0 голосов
/ 11 января 2019

Представление вызывается ajax, поэтому редирект возвращается и обрабатывается javascript, что, очевидно, не приведет к перенаправлению страницы.

Если вы хотите перенаправить, вы должны:

  • установите data-fm-callback на redirect_from_response или redirect, как описано в документации
  • и измените ваше представление так, чтобы оно отправляло URL-адрес перенаправления в ответе (или, поскольку оно статично, просто жестко закодируйте его в атрибуте data-fm-target, и представление возвращает только статус 'ok': self.render_json_response(self.get_success_result())).
...