2015-11-03 10 views
7

मैं Django Rest Framework के साथ निर्मित एपीआई पर काम कर रहा हूं। मैंने कई model कक्षाओं को परिभाषित किया है और मैंने निर्दिष्ट api-endpoints में होने वाली कुछ प्रश्नों पर लागू करने के लिए कुछ फ़िल्टर भी बनाए हैं।Django Rest फ़िल्टर के साथ क्वेरी परिणामों को सीमित करने के लिए कैसे करें

मैं queryset में LIMIT लागू करने का प्रयास कर रहा हूं लेकिन मैं को Django नोटेशन e.x का उपयोग करना पसंद नहीं करूंगा। Entry.objects.all()[:5]। इसके बजाय मैं मॉडल से जुड़े फ़िल्टर के अंदर से सीमा लागू करने में सक्षम होना चाहता हूं।

अब तक मुझे कोई समाधान नहीं मिला है। मैं सोच रहा हूं कि मुझे डिफॉल्ट वैल्यू वाले फ़िल्टर को परिभाषित करने का कोई तरीका ढूंढना चाहिए जिसके परिणामस्वरूप क्वेरीसेट को सीमित नहीं किया जा सकता है और यदि कोई अनुरोध एंडपॉइंट तक पहुंचता है और ?filter=10 जैसा कुछ होता है तो क्वेरीसेट पहले 10 तक सीमित होना चाहिए।

उत्तर

3

आप Django बाकी फ्रेमवर्क पृष्ठांकन उपयोग कर सकते हैं पर Django-आराम

http://www.django-rest-framework.org/api-guide/pagination/

नज़र से पृष्ठांकन एपीआई का उपयोग करना चाहिए। Pagination_class LimitOffsetPagination आपको एक query_param में लौटाई गई प्रविष्टियों की संख्या सीमित करने की क्षमता देता है।

http://www.django-rest-framework.org/api-guide/pagination/

+0

कि बहुत क्या मैं वास्तव में जरूरत के करीब है कर सकते हैं! हालांकि उस मामले में मैं 'LimitOffsetPagination' वर्ग को ओवरराइड करना चाहता हूं और पैरामीटर 'ऑफ़सेट' को डिफ़ॉल्ट मान (शायद 0) देना चाहता हूं ताकि उपयोगकर्ता को केवल 'सीमा' पैरामीटर निर्दिष्ट करना होगा। मैं 'PageNumberPagination' का उपयोग करने और डिफ़ॉल्ट मान 'सीमा' रखने के लिए' page_size_query_param' पैरामीटर को ओवरराइड करने के बारे में सोच रहा हूं। क्या यह उचित लगता है? – LetsPlayYahtzee

+0

हां, यह एक अच्छा समाधान है। जैसा कि प्रलेखन में बताया गया है, क्लाइंट 'पृष्ठ_size_query_param'' का उपयोग क्लाइंट को अनुरोध पृष्ठ आकार को नियंत्रित करने की अनुमति देने के लिए किया जा सकता है। 'PageNumberPagination'' में यह param किसी के लिए डिफ़ॉल्ट के रूप में सेट नहीं है। –

+0

यह मूर्खतापूर्ण लग सकता है, लेकिन मैं यह नहीं समझ सकता कि कस्टम पेजिनेशन क्लास कहां रखा जाए। – LetsPlayYahtzee

1

आप बढ़ाने या पृष्ठांकन कक्षाएं उपलब्ध अनुकूलित में drf

class UserSpecificPagination(LimitOffsetPagination): 
     def get_limit(self, request): 
      if logic_met(request.user): 
      self.max_limit = custom_limit 
     return super(UserSpecificPagination, self).get_limit(request) 

listapiview में pagination_class के रूप में वर्ग सेट या डीआरएफ सेटिंग्स

संबंधित मुद्दे