Я использую django-фильтр в 2 местах: мой Django Rest Framework API и в моих FilterViews (универсальные ListViews фильтра Django.) В В случае моих FilterView я показываю как блоки выбора ( ModelChoiceFilter ), так и блоки множественного выбора (ModelMultipleChoiceFilter) для фильтрации.
Мне нужно иметь возможность ограничить количество входов для выбора и множественного выбора на основе поля внутри запроса.
Относительно просто изменить то, что указано как kwarg в соответствующем поле в FilterSet. Например, вот мой FilterSet, где набор запросов установлен как kwarg:
class FieldFilter(django_filters.FilterSet):
"""Filter for the field list in the API"""
dataset = ModelChoiceFilter(queryset=Dataset.objects.all())
class Meta(object):
"""Meta options for the filter"""
model = Field
fields = ['dataset']
И относительно просто ограничить, какой результат находится в DRF внутри метода get_queryset()
. Например, вот мой DRF ViewSet:
class FieldViewSet(viewsets.ReadOnlyModelViewSet):
"""A ViewSet for viewing dataset fields"""
queryset = Field.objects.all()
serializer_class = FieldSerializer
filter_class = FieldFilter
def get_queryset(self):
"""Get the queryset"""
queryset = super(FieldViewSet, self).get_queryset()
queryset = queryset.filter(
dataset__organization=self.request.organization)
return queryset
Я просто не могу нигде найти место для редактирования поля Dataset
в filter_class
, когда отображается вид.
Это очень просто в общих представлениях Django FormView
, но не похоже, что FieldViewSet
следует той же структуре get_form()
, что и общие представления. Это также относительно просто сделать в админе, но DRF / Django-Filter, похоже, тоже не следует этой структуре.
Есть ли способ настроить набор запросов в этих входах для каждого запроса? Желательно как в FilterViews, так и в браузере HTML API, но просто в FilterViews будет хорошо, если это слишком сложно для браузера HTML API.