2012-10-27 10 views
10

Django व्यवस्थापक में मेरे कुछ विचारों को लोड करने में बहुत लंबा समय लगता है। चिंग अप चक्र क्या है यह देखने के लिए Django व्यवस्थापक दृश्य को डीबग करने का सबसे अच्छा तरीका क्या है?धीमे Django व्यवस्थापक विचारों को डिबगिंग

+6

https://github.com/django-debug-toolbar/django-debug-toolbar#readme – rantanplan

+0

आप व्यवस्थापक वर्ग – yedpodtrzitko

उत्तर

9

जैसा कि रतनप्लान ने टिप्पणी की, django debug toolbar प्रोफाइलिंग शुरू करने का सबसे आसान तरीका है (पेज लोड पर निष्पादित सभी प्रश्न दिखाता है, उनके एक्स्पलाइन, निष्पादित करने के लिए अपना समय इत्यादि)। How to profile django application with respect to execution time?

यही सवाल € ाय के उपयोग, जो भी profiling django तहत Django के विकी पर संदर्भित है का उल्लेख है: तुम भी यहाँ एक धीमी गति से Django स्थापना की रूपरेखा के बारे में एक सवाल पर एक नज़र हो सकता था।

3

मैंने भी इसे Django व्यवस्थापक में विशेष मॉडल के साथ देखा है यदि उनकी टेबल बहुत बड़ी हैं (कई मिलियन रिकॉर्ड चाल चलेंगे) और टेबल इंजन MySQL के InnoDB है। 100 एम + रिकॉर्ड के साथ टेबल के लिए फिर से मेरे Django व्यवस्थापक को फिर से मिलाने के लिए कामकाज का पता लगाने में मुझे कुछ समय लगा। मूल समस्या COUNT(*) पृष्ठ लोड पर पूछताछ और यहां तक ​​कि खराब तरीके से निर्मित क्वेरी पूछताछ समाप्त हो गई जब भी मैंने मॉडल 0 से अपने search_fields में से एक का उपयोग किया।

मैं अपने सभी समाधान यहाँ प्रलेखित है, ताकि वे एक दिन संकट में एक साथी Django-er मदद कर सकता है: http://craiglabenz.me/2013/06/12/how-i-made-django-admin-scale/

+2

उम देने के लिए 'list_select_related = True' संपत्ति' जोड़ने का प्रयास कर सकते हैं, आपको यहां समाधान को संक्षेप में/देना चाहिए यदि लिंक टूट जाता है (फिर से)। – SamB

+1

यह उत्तर काम करता है, बग याद रखें कि यदि आप 'ModelAdmin' को अनुकूलित कर रहे हैं, तो आपको अपने' get_queryset' को फिर से लिखना चाहिए क्योंकि 'django.admin'' _default_manager' का उपयोग करता है। अधिक जानकारी जांचें [यह] (http://stackoverflow.com/questions/1545067/django-specify-which-model-manager-django-admin-should-use)। – shellbye

0

आप MySQL के साथ Django का उपयोग करते हैं तो अंदरूनी साथ MySQL में एक बग मिलती अनुकूलन है। यदि आप Admin.list_display में विदेशी कुंजी का उपयोग करने का प्रयास करते हैं तो Django ऑर्डरिंग और इनर जॉइन के साथ क्वेरी जेनरेट करेगा जो MySQL में बेहद धीमी है।

है कि करने के लिए दो समाधान हैं:

  1. उपयोग Django-mysql ठीक बैकएंड: AdminChangeList में https://pypi.python.org/pypi/django-mysql-fix

  2. अवहेलना get_query_set - हटाने select_related और prefetch_related क्षेत्रों सेट - अधिक जानकारी के मेरे दूसरे में हैं यहां जवाब: https://stackoverflow.com/a/23097385/1178806

-1

यहां कुछ अच्छे हैं आप list_per_page विकल्प जोड़ने और कम परिणाम दिखा सकता 1): धीमी गति से रूपों संपादित कई रिकॉर्ड Django admin change form load quite slow

के बारे में सूची दृश्य के साथ ForeignKey तालिकाओं के कारण के बारे में nswers

class EventAdmin(admin.ModelAdmin): 
    list_per_page = 20 

2) या का उपयोग select_related():

2,1) Django < 1.6 के लिए:

class EventAdmin(admin.ModelAdmin): 
    def queryset(self, request): 
     qs = super(EventAdmin, self).queryset(request) 
     return qs.select_related('foreign_key_field1, foreign_key_field2, etc') 

2.2) Django> = 1.6 के लिए:

class EventAdmin(admin.ModelAdmin): 
    def get_queryset(self, request): 
     qs = super(EventAdmin, self).queryset(request) 
     return qs.select_related('foreign_key_field1, foreign_key_field2, etc') 
बेशक

, foreign_key_field1 बदल दें और foreign_key_field2, आदि उपयुक्त क्षेत्र नाम के साथ।

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