Django и DRF-DataTables - исправление поведения фильтрации
Я использую DRF-DataTables для создания просматриваемой таблицы на стороне клиента.
Модель, с которой я работаю, содержит несколько нулевых булевых полей, таких как:
models.py
class Record(...):
name = models.CharField(..., blank=True, null=True)
is_active = models.BooleanField(blank=True, null=True)
Таблица отображается с serverside=true
, однако при попытке фильтрации по столбцу is_active
наблюдается нежелательное поведение:
- filtering with "True" or "true" correctly retrieves only the records where
is_active=True
- filtering with "False" (or any iteration where the 'F' is capitalized) correctly retrieves the records where
is_active=False
- filtering with "false" incorrectly retrieves all records (but "fals" pulls the records where
is_active=False
)
Более того - похоже, что нет возможности отфильтровать записи, где is_active=None
или name=None
Идеальным решением было бы переопределить логику фильтрации, написав свою собственную FilterSet
, однако при попытке следовать документации я столкнулся с этой ошибкой:
views.py
class RecordGlobalFilter(...):
name = GlobalCharFilter(lookup_expr='icontains')
class Meta:
model = Record
fields = '__all__'
class RecordViewSet(...):
...
filter_backends = [DatatablesFilterBackend]
filterset_class = RecordFilter
Ошибка:
AttributeError: type object 'RecordFilter' has no attribute '_meta'