pagination - Django: Paginate by sorted SerializerMethodField -
मुझे जेसन डेटा को paginating के साथ एक मुद्दा रहा है जो कि rest_framework
कोड> SerializerMethodField । इससे पहले कि मैंने अपनी सूची दृश्यों में पृष्ठांकन जोड़ना शुरू किया, मेरे पास एक संदर्भ वैरिएबल में सॉर्ट किए गए जेएसएन डेटा था:
वर्ग ExampleList (ListView): ... def get_context_data (स्वयं, ** kwargs): संदर्भ = सुपर (ExampleList, आत्म) .get_context_data (** kwargs) संदर्भ [ "उदाहरण"] अनुसार क्रमबद्ध = (ExampleSerializer (प्रस्तुतियाँ, कई = सच, संदर्भ = { 'अनुरोध': self.request}) .data, कुंजी = लैम्ब्डा x: x.get ("score"), रिवर्स = ट्रूक्स) रिटर्न संदर्भ ...
यह पूरी तरह से काम करता है, क्योंकि लैम्ब्डा फ़ंक्शन ने स्कोर को पकड़ा था, और इसका आदेश दिया था , बिल्कुल कैसे सॉर्ट किया गया ()
को काम करना चाहिए समस्या पृष्ठ पर अंक लगाना शुरू हुई मैंने कुछ दिनों के लिए शोध किया है, और जेसन डेटा द्वारा पाउंड करने के लिए कोई भी तरीका नहीं है जो मुझे मिल सकता है केवल क्वेरीसमूहों द्वारा
जब मैं paginating, यहाँ मेरे दो Serializer वर्गों रहे हैं शुरू कर दिया।
वर्ग ExampleSerializer (serializers.ModelSerializer): स्कोर = serializers.SerializerMethodField ( 'get_score' ) वर्ग मेटा मॉडल = उदाहरण क्षेत्रों = ( 'आईडी', '...', 'स्कोर',) डीईएफ़ get_score (स्वयं, obj): वापसी obj.calculate_score () वर्ग PaginatedExampleSerializer (pagination.PaginationSerializer): वर्ग मेटा: object_serializer_class = ExampleSerializer
मेरी सूची दृश्यों में से एक में, मैं एक हल कर संदर्भ उद्देश्य यह है कि स्कोर
द्वारा धारावाहिक डेटा सॉर्ट करता है और यह पृष्ठांकन बना लिया है। मैंने भी, paginate_examples ()
नामक पृष्ठांकन के लिए कॉल करने के लिए एक विधि बनाई है। जैसा कि आप देख सकते हैं, यह पहले क्वेरीसटेट द्वारा चित्रित करता है, और फिर प्रत्येक पृष्ठांकित पेज पर score
द्वारा डेटा को रूपांतरित करता है तो पृष्ठ 1 पर कुछ ऐसा होना चाहिए जो पृष्ठ 5 या उसके बाद सभी तरह से वापस आ गया है।
वर्ग उदाहरण लिस्ट (सूची दृश्य): क्वेरीसैट = उदाहरण.ऑब्जेक्ट्सएल्स () def paginate_examples (स्वयं, क्वेरीसैट , paginate_by): paginator = paginator (क्वेरीसमूह, paginate_by) पेज = self.request.GET.get ( 'पेज') का प्रयास करें: उदाहरण = paginator.page (पेज) PageNotAnInteger को छोड़कर: उदाहरण = paginator.page (1) EmptyPage को छोड़कर: उदाहरण = पेजिनेटर.पेज (पेजिनेटर.नम_पेज) रिटर्न पेजिनेटेड एक्सपोज़र सर्यरलाइजर (उदाहरण, प्रसंग = {'अनुरोध': स्वयं। अनुरोध))। डेटा डीएफ़ get_context_data (स्वयं, ** kwargs): संदर्भ = सुपर (उदाहरण लिस्ट, स्वयं) .get_context_data ** kwargs) पृष्ठांकन = self.paginate_examples (self.queryset, self.paginate_by) उदाहरण = pagination.get ( "परिणाम") संदर्भ [ "उदाहरण"] = अनुसार क्रमबद्ध (उदाहरण, कुंजी = लैम्ब्डा एक्स: x.get ( "स्कोर "), रिवर्स = ट्रू) संदर्भ [" पृष्ठांकन "] = पृष्ठांकन पुनः फिर से समस्या
फिर, समस्या यह है कि /? Page = 1
पर प्रदर्शित होने वाले सूची आइटम /? Page = x < / Code> क्योंकि
PaginatedExampleSerializer
इससे पहले कि यह SerializerMethodField
द्वारा सॉर्ट हो जाता है, डेटा को पृष्ठबद्ध करता है।
क्या Django में queryset
द्वारा paginating के बजाय पहले से ही सीरियल किया गया डेटा को पृष्ठबद्ध करने का कोई तरीका है? या क्या मुझे कुछ तरीकों से स्वयं बनाने की ज़रूरत है? मैं एक डेटाबेस क्षेत्र को स्कोर
बनाने से बचना चाहूंगा, लेकिन अगर मुझे कोई समाधान नहीं मिल सकता है, तो मुझे लगता है कि मुझे यह करना होगा। इस पर कोई मदद काफी सराहना की जाएगी।
Comments
Post a Comment