में फ़िल्टर करने के लिए मेटाडेटा जोड़ना मेरे पास एक सामान्य ListCreateAPIView
व्यू है। मैंने एक get_queryset
फ़ंक्शन लागू किया है जो एक खोज करता है। फ़ंक्शन क्वेरी को पार करता है, टैग और शर्तों को निकालता है और एक क्वेरी सेट देता है।django आराम फ्रेमवर्क
def get_queryset(self):
query = self.request.QUERY_PARAMS.get('query', None)
# No deleted items
queryset = Items.objects.filter(deleted__isnull=True)
if query is None:
return queryset
predicates = []
# Generate predicates from query
queryset = queryset.filter(reduce(__and__,predicates))
return queryset
सबसे अच्छा तरीका है get_queryset
समारोह से डेटा के साथ जवाबी कार्रवाई के लिए मेटाडाटा को जोड़ने के लिए क्या है?
मैं पेजिनेशन काम के तरीके के समान कुछ ढूंढ रहा हूं।
{
query : {
terms : ['term1','term2'],
tags : ['tag1','tag2'] ,
}
results : [
{ name : 'item1', .... }
{ name : 'item2', .... }
]
}
संपादित
तो मैं छानने के लिए एक कस्टम FilterBackend
बनाया है और अब मैं अनुरोध और प्रतिक्रिया का एक उदाहरण है। Django आराम के लिए पेजिनेशन कोड को देखते हुए मुझे लगता है कि यह परिणाम serializer में लपेट रहा है। पेजिनेशन व्यू क्लास में बनाया गया है, इसलिए अगर एक पेजिनेटर का पता चला है तो एफडब्ल्यू सीरियलाइजेशन को आमंत्रित करता है। खोज एपीआई को देखकर कोई नया विचार नहीं आया।
मेरा प्रश्न बनी हुई है, फिल्टर बैकएंड से मेटाडेटा को प्रतिक्रिया में जोड़ने का सबसे अच्छा और कम से कम घुसपैठ करने वाला तरीका क्या है?
एक तरीका मैं सोच सकता हूं (और जिसे मैं पसंद नहीं करता) फ़िल्टर बैकएंड में अनुरोध पर मैटाडाटा को अधिभारित करना है और दृश्य में finalize_response
ओवरराइड करना है - इसमें कोई संदेह नहीं है कि इसे करने का सबसे बुरा तरीका है।
जब मैं अवरोधन करने की कोशिश की प्रतिक्रिया ऑब्जेक्ट मुझे "ContentNotRenderedError - प्राप्त सामग्री को एक्सेस करने से पहले प्रस्तुत किया जाना चाहिए।" दुर्भाग्यवश, मुझे लगता है कि आपको उन स्थानों को ओवरराइट करने की आवश्यकता है जहां प्रतिक्रिया कहा जाता है ताकि आप "डेटा" के प्रारूप को बदल सकें। –
@MarkChackerian मुझे यकीन नहीं है कि आपकी त्रुटि किस वजह से हुई है, लेकिन मैंने अपना उत्तर पूर्ण उदाहरण के साथ अपडेट किया है जिसे मैंने डीआरएफ 2.3.13 का उपयोग करके काम करने के लिए सत्यापित किया है। क्या आप फिर से जांच सकते हैं? – Fiver
मैंने फिर से जांच की है और पुष्टि की है कि आपका समाधान काम करता है। जब भी मैं प्रतिक्रिया ऑब्जेक्ट का निरीक्षण करने का प्रयास करता हूं तब भी मुझे त्रुटि मिलती है, लेकिन वास्तव में ऐसा करने की आवश्यकता नहीं होती है। –