Как объединить загрузчик и выбрать фильтр для таблицы? - PullRequest
0 голосов
/ 07 ноября 2019

Я сейчас использую paginator на столе. Я хочу добавить выбор для фильтрации таблицы, но мне не удается перемещаться по страницам без потери выбора.

В настоящее время (см. Код ниже), когда я перемещаюсь, нажимая на предыдущую или следующую, опция, выбранная с помощьюиспользуется потеряно, и все данные представлены.

Я должен изменить условие 'else', чтобы учесть выбранную опцию. Я думал об использовании глобальной переменной для сохранения выбранной опции в переменной, но это может иметь побочный эффект, и это не очень рекомендуется ...

views.py

@login_required
def index(request):

    # data sent (click on 'search' button or option selected)
    if request.POST:
        # data from select
        selection = request.POST.get('selection', False)
        # data from search
        ide = request.POST.get('ide', False)

        # search
        if ide == "":
            paginator = Paginator(Preinclusion.objects.all(), 5)
            preincluded = paginator.page(1)
        else:
            paginator = Paginator(Preinclusion.objects.filter(pat_num__startswith = ide),5)
            preincluded = paginator.page(1)

        # select
        if selection == 'Randomized':
            print('Randomized')
            paginator = Paginator([patient for patient in Preinclusion.objects.all() if patient.is_randomized], 5)
            preincluded = paginator.page(1)

        elif selection == 'Not randomized':
            print('Not randomized')
            paginator = Paginator([patient for patient in Preinclusion.objects.all() if not patient.is_randomized], 5)
            preincluded = paginator.page(1)

        elif selection == 'All patients':
            print('All patients')
            paginator = Paginator(Preinclusion.objects.all(), 5)
            preincluded = paginator.page(1)

        if not preincluded:
            liste_existe = False # non utilisé dans le template

    else:

        # first index visited
        paginator = Paginator(Preinclusion.objects.all(), 5)
        page = request.GET.get('page')

        try:
            preincluded = paginator.page(page)
        except PageNotAnInteger:
            preincluded = paginator.page(1)
        except EmptyPage:
            preincluded = paginator.page(paginator.num_pages)

    return render(request, 'randomization/index.html', {'preincluded': preincluded})    

Я бынапример store выбранный параметр для предыдущей / следующей навигации.

Ответы [ 2 ]

1 голос
/ 07 ноября 2019

вы можете использовать сессию Django для хранения всего, что вы хотите, например: request.session['my_key'] = 'My Value'

0 голосов
/ 07 ноября 2019

Просто передайте свой атрибут 'selection' в контекст рендеринга, подобный этому

    return render(request, 'randomization/index.html', {'preincluded': preincluded, 'selection': selection})    

Затем обработайте эту переменную контекста в шаблоне ({{selection}}) и установите выбранную опцию этим значением. Один из возможных вариантов будет таким:

<select>
<option value="Randomized" {% if selection == "Randomized" %}selected{% endif %}>1</option>
</select>

Как вы сказали, избегайте использования глобальных переменных в асинхронных приложениях и приложениях без сохранения состояния

...