Django_filter: фильтрация по текущему значению другого поля
Итак, мне поручили создать страницу событий, на которой моя компания может размещать информацию о предстоящих событиях, а посетители могут фильтровать по местоположению, названию или типу события на основе других 'is_virtual', которые могут быть личными, виртуальными или гибридными. Теперь они хотят "игнорировать" фильтр по местоположению, если мероприятие виртуальное или гибридное, но сохранить его, если мероприятие очное. У меня возникли проблемы с доступом к значению поля is_virtual текущего объекта, чтобы создать условную фильтрацию на основе его значения.
вот код фильтра:
import django_filters
from django import forms
from .models import EventsPage
class EventsFilter(django_filters.FilterSet):
event_type = django_filters.ChoiceFilter(
choices=EventsPage.event_choices,
empty_label='Event Type',
widget=forms.Select(attrs={'class': 'custom-select mb-2'})
)
location = django_filters.ChoiceFilter(
choices=EventsPage.location_choices,
empty_label='All Locations',
widget=forms.Select(attrs={'class': 'custom-select mb-2'})
)
title = django_filters.CharFilter(
lookup_expr='icontains',
widget=forms.TextInput(
attrs={'class': 'form-control', 'placeholder': 'Search Events'})
)
class Meta:
model = EventsPage
fields = ['event_type', 'location', 'title']
Любые идеи помогут! Заранее спасибо.
пробовал использовать аргумент ключевого слова метода, встроенного в библиотеку django_filter, и значения, переданные вспомогательному методу, показывают только значение текущего поля, но я не могу увидеть текущее значение поля is_virtual.
вот что я пытался сделать:
location = django_filters.ChoiceFilter(
method='location_filtering',
choices=EventsPage.location_choices,
empty_label='All Locations',
widget=forms.Select(attrs={'class': 'custom-select mb-2'})
)
def location_filtering(self, queryset, name, value):
if (Q(virtual_choices='Virtual') | Q(virtual_choices='Hybrid')):
return queryset.exclude(**{name: value})
else:
return queryset.filter(**{name: value})