Şu anda Django REST Framework'ün tüm görünümler için DjangoFilterBackend
'u kullanacağını söylüyorsunuz, ancak FilterSet
ürününün nasıl oluşturulacağını anlatmıyorsunuz.
django-filter
otomatik fields
are set to None
eğer bir model üzerinde alanların tamamına ait bir FilterSet
üretecektir. Django REST Framework, filter_fields
are not set to None
otomatik olarak FilterSet
üretir; bu, varsayılan DjangoFilterBackend
'u kullanamayacağınız anlamına gelir.
Modeldeki tüm alanlar için otomatik olarak FilterSet
'u üretecek olan özel bir DjangoFilterBackend
oluşturabilirsiniz.
from rest_framework.filters import DjangoFilterBackend
class AllDjangoFilterBackend(DjangoFilterBackend):
"""
A filter backend that uses django-filter.
"""
def get_filter_class(self, view, queryset=None):
"""
Return the django-filters `FilterSet` used to filter the queryset.
"""
filter_class = getattr(view, 'filter_class', None)
filter_fields = getattr(view, 'filter_fields', None)
if filter_class or filter_fields:
return super(AllDjangoFilterBackend, self).get_filter_class(self, view, queryset)
class AutoFilterSet(self.default_filter_set):
class Meta:
model = queryset.model
fields = None
return AutoFilterSet
Bu hala görünümü özel bir filter_class
veya filter_fields
tanımlar durumlar için orijinal filtre panelini kullanabilirsiniz, ancak tüm diğer durumlar için özel bir FilterSet
üretecektir. Kendinizi gelecekteki güvenlik sorunlarına (kullanıcı listesini şifre ile filtreleyen insanlar gibi) açarken, filtrelenecek API aracılığıyla iade edilmeyen alanlara izin vermemeniz gerektiğini unutmayın.
Django filtre uygulamasını yüklediniz mi? – mariodev
yep. Yazdığım gibi - açık bir şekilde filterbackend ve alanları ayarladığımda çalışıyor. – haki