अभी आप सभी विचारों के लिए DjangoFilterBackend
का उपयोग करने के लिए Django REST Framework को बता रहे हैं, लेकिन आप यह नहीं बता रहे हैं कि FilterSet
उत्पन्न होना चाहिए।
django-filter
स्वचालित रूप से एक मॉडल है, तो fields
are set to None
पर क्षेत्रों के सभी के लिए एक FilterSet
उत्पन्न होगा। Django REST Framework स्वचालित रूप से FilterSet
उत्पन्न करेगा यदि filter_fields
are not set to None
, जिसका अर्थ है कि आप डिफ़ॉल्ट DjangoFilterBackend
का उपयोग करने में सक्षम नहीं होंगे।
हालांकि आप एक कस्टम DjangoFilterBackend
बना सकते हैं, जो मॉडल पर सभी फ़ील्ड के लिए स्वचालित रूप से FilterSet
उत्पन्न करेगा।
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
यह अभी भी स्थितियों में, जहां दृश्य एक कस्टम filter_class
या filter_fields
को परिभाषित करता है के लिए मूल फिल्टर बैकएंड का उपयोग करेगा, लेकिन यह अन्य सभी परिस्थितियों के लिए एक कस्टम FilterSet
उत्पन्न होगा। ध्यान रखें कि आपको उन फ़ील्ड को अनुमति नहीं देनी चाहिए जिन्हें फ़िल्टर करने के लिए एपीआई के माध्यम से वापस नहीं किया जाता है, क्योंकि आप भविष्य में सुरक्षा मुद्दों (जैसे पासवर्ड द्वारा उपयोगकर्ता सूची फ़िल्टर करने वाले लोगों) को खोल रहे हैं।
स्रोत
2014-11-30 23:25:08
क्या आपने django-filter ऐप इंस्टॉल किया है? – mariodev
हाँ। जैसा कि मैंने लिखा - यह काम कर रहा है जब मैं स्पष्ट रूप से फिल्टरबैक और फ़ील्ड सेट करता हूं। – haki