मैं अपनी वेबसाइट पर हर जगह Django Paginator का उपयोग कर रहा हूं और इसे और अधिक सुविधाजनक बनाने के लिए एक विशेष टेम्पलेट टैग भी लिखा है। लेकिन अब मुझे एक राज्य मिला, जहां मुझे एक जटिल कस्टम कच्चे एसक्यूएल क्वेरी बनाने की जरूरत है, कि LIMIT
के बिना लगभग 100 के रिकॉर्ड वापस आ जाएंगे।Django: Paginator + कच्चे एसक्यूएल क्वेरी
मैं कस्टम क्वेरी के साथ Django Pagintor का उपयोग कैसे कर सकता हूं?
मेरी समस्या कासरलीकृत उदाहरण:
मेरे मॉडल:
class PersonManager(models.Manager):
def complicated_list(self):
from django.db import connection
#Real query is much more complex
cursor.execute("""SELECT * FROM `myapp_person`""");
result_list = []
for row in cursor.fetchall():
result_list.append(row[0]);
return result_list
class Person(models.Model):
name = models.CharField(max_length=255);
surname = models.CharField(max_length=255);
age = models.IntegerField();
objects = PersonManager();
तरह से मैं Django ORM साथ pagintation का उपयोग करें:
all_objects = Person.objects.all();
paginator = Paginator(all_objects, 10);
try:
page = int(request.GET.get('page', '1'))
except ValueError:
page = 1
try:
persons = paginator.page(page)
except (EmptyPage, InvalidPage):
persons = paginator.page(paginator.num_pages)
इस तरह, Django, बहुत होशियार हो और इसे निष्पादित करते समय LIMIT
क्वेरी में जोड़ता है। लेकिन जब मैं कस्टम प्रबंधक का उपयोग करें:
all_objects = Person.objects.complicated_list();
सभी डेटा चयनित है, और उसके बाद ही अजगर सूची कटा हुआ है, जो बहुत धीमी है। मैं अपना कस्टम मैनेजर कैसे बना सकता हूं जैसा कि एक में बनाया गया है?
पायथन में, जब भी आप अपनी व्यक्तिगत कक्षा में चाहें तो आपको व्हाइटस्पेस का उपयोग नहीं करना चाहिए। – Gereltod