В Django как я могу перечислить набор запросов в одном представлении / шаблоне, сгенерированном другим представлением?
Я разрабатываю систему отслеживания, которая имеет 2 основных набора данных Orders и Shipments. Сосредоточив внимание на Orders, я хочу разрешить пользователям вводить любую комбинацию полевых данных, а затем отображать результирующий список с помощью разбивки на страницы. Для достижения этой цели у меня есть 2 вида / шаблона. Один из них, search_orders, отображает форму, которая, по сути, представляет собой список большинства полей набора данных. Другой, list_orders, отображает список выбранных заказов. Все это прекрасно работает, если я просто отображаю list_orders из search_orders без разбивки на страницы, но для того, чтобы получить разбивку на страницы, мне (полагаю, что мне) нужно search_orders перенаправить на list_orders и, таким образом до сих пор мне это не удавалось.
Просмотр поисковых запросов:
Просмотр списка заказов:
@login_required
def list_orders(request, action):
#orders = Order.objects.all()
if action == 'today':
today = timezone.now().date()
orders = Order.objects.filter(booked=today)
elif action == 'open':
orders = Order.objects.all().exclude(closed=True).order_by('-booked')
paginator = Paginator(orders,16)
page_number = request.GET.get('page',1)
orders = paginator.page(page_number)
return render(request,'tracker/list_orders.html',{'orders':orders,'action':action})
urls.py
app_name = 'tracker'
urlpatterns = [
path("about/", views.about, name="about"),
path("mainmenu/", views.mainmenu, name="mainmenu"),
path("search_orders/", views.search_orders, name="search_orders"),
path("list_orders/<str:action>/", views.list_orders, name="list_orders"),
...
Как я могу передать отфильтрованный набор запросов в list_orders для постраничного отображения или, в качестве альтернативы, передать выбранные поля запроса в list_orders таким образом, чтобы list_orders мог выполнять фильтрацию?
(Для краткости я опустил соответствующие шаблоны, но при желании могу их добавить.)
Ответ, который меня устраивает, заключается в преобразовании результирующего QueryDict, сгенерированного search_orders, сначала путем преобразования в двоичный файл с помощью pickle, а затем преобразования результирующего двоичного файла в base64 а затем перенаправить на list_orders с выводом pickled/base64 в виде одного строкового параметра.
На принимающей стороне, в list_orders, первое, что нужно сделать, это отменить процесс обработки/base64, чтобы преобразовать параметр обратно в QueryDict, а затем обработать его - но эта обработка выполняется в list_orders, а не в search_orders.
Таким образом, по сути, страница/представление поиска используется только для получения входных данных фильтрации, а страница/представление списка выполняет фактическую обработку.