آنچه در این مقاله میخوانید [پنهانسازی]
افزایش سرعت Django Admin معمولا به بهینه سازی Query ها، مدیریت درست Model ها و کاهش عملیات سنگین داخل پنل ادمین مربوط میشود. وقتی Django Admin کند میشود، معمولا مشکل از تعداد زیاد Query ها، نمایش دادههای سنگین، استفاده اشتباه از Relationship ها یا لود شدن حجم زیاد اطلاعات است. اگر این مشکلات به موقع برطرف نشوند، کار کردن با پنل مدیریت پروژه به مرور سخت و آزاردهنده میشود.
سرفصل های مقاله
- چرا Django Admin کند میشود؟
- Query های زیاد در Django Admin
- مشکل N+1 Query در Admin
- روش حل N+1 Query در Django Admin
- استفاده اشتباه از list_display
- نمایش تعداد زیادی داده
- روش محدود کردن دادهها
- استفاده زیاد از ForeignKey و ManyToMany
- مشکل Search سنگین در Admin
- روش بهتر برای Search
- استفاده اشتباه از filter_horizontal
- چگونه دلیل کندی Django Admin را پیدا کنیم؟
- استفاده از Django Debug Toolbar
- بررسی تعداد Query ها
- بررسی زمان پاسخ دیتابیس
- روشهای افزایش سرعت Django Admin
- استفاده از list_select_related
- محدود کردن list_display
- استفاده از raw_id_fields
- استفاده از autocomplete_fields
- کاهش Query های متدها
- استفاده از Index در دیتابیس
- اشتباهات رایج برنامه نویسان Django
- نمایش همه Relationship ها
- Search روی Text های بزرگ
- استفاده زیاد از Inline ها
- لود تصویرهای سنگین
- روش جلوگیری از کند شدن Django Admin
- Query ها را مرتب بررسی کنید
- Admin را ساده نگه دارید
- Pagination را جدی بگیرید
- از Cache استفاده کنید
- جمع بندی
چرا Django Admin کند میشود؟
Django Admin به صورت پیش فرض برای پروژههای کوچک و متوسط عملکرد خوبی دارد.
اما وقتی:
- تعداد دادهها زیاد شود
- Model ها پیچیده شوند
- Query ها سنگین شوند
پنل ادمین کم کم کند میشود.
این مشکل معمولا در:
- فروشگاهها
- CRM ها
- پنلهای مدیریتی بزرگ
بیشتر دیده میشود.
Query های زیاد در Django Admin
یکی از اصلیترین دلایل کندی Admin همین موضوع است.
مثلا:
list_display = ['title', 'author']
اگر author یک ForeignKey باشد، Django برای هر ردیف Query جدا اجرا میکند.
نتیجه:
- تعداد Query بالا میرود
- لود صفحه کند میشود
مشکل N+1 Query در Admin
این مشکل خیلی رایج است.
مثلا:
- 100 ردیف نمایش داده می شود
- برای هر ردیف اطلاعات Author جداگانه خوانده می شود
در نتیجه صدها Query اجرا میشود.
روش حل N+1 Query در Django Admin
باید از select_related استفاده شود.
مثلا:
class PostAdmin(admin.ModelAdmin):
list_select_related = ['author']
این کار تعداد Query ها را به شدت کمتر میکند.
استفاده اشتباه از list_display
بعضی افراد داخل list_display متدهای سنگین قرار میدهند.
مثلا:
def total_orders(self, obj):
return obj.orders.count()
این متد برای هر ردیف Query جدا اجرا میکند.
اگر تعداد داده زیاد باشد، Performance شدیدا افت میکند.
نمایش تعداد زیادی داده
بعضی پروژهها هزاران رکورد را همزمان داخل Admin نمایش میدهند.
این موضوع:
- RAM مصرف میکند
- Query ها را سنگین میکند
- زمان Load را بالا میبرد
روش محدود کردن دادهها
میتوانید Pagination را تنظیم کنید:
list_per_page = 20
این کار فشار روی پنل را کمتر میکند.
استفاده زیاد از ForeignKey و ManyToMany
وقتی Model ها رابطههای پیچیده داشته باشند، Django Admin Query های زیادی اجرا میکند.
مثلا:
- Product
- Category
- Brand
- Supplier
همزمان داخل Admin نمایش داده شوند.
این موضوع مخصوصا در پروژههای بزرگ مشکل ساز میشود.
مشکل Search سنگین در Admin
بعضی افراد Search را روی فیلدهای سنگین فعال میکنند.
مثلا:
search_fields = ['description']
اگر دیتابیس بزرگ باشد، Search کند میشود.
روش بهتر برای Search
بهتر است:
- روی فیلدهای کوتاه Search انجام شود
- فیلدهای مهم Index داشته باشند
- Query ها محدود شوند
استفاده اشتباه از filter_horizontal
اگر دادهها زیاد باشند:
filter_horizontal = ['categories']
ممکن است باعث کندی شدید Admin شود.
مخصوصا وقتی هزاران رکورد وجود داشته باشد.
چگونه دلیل کندی Django Admin را پیدا کنیم؟
استفاده از Django Debug Toolbar
این ابزار یکی از بهترین روشها برای تحلیل Query هاست.
نصب:
pip install django-debug-toolbar
این ابزار نشان میدهد:
- چند Query اجرا شده
- زمان هر Query چقدر بوده
- کدام Query کند است
بررسی تعداد Query ها
میتوانید Query ها را بررسی کنید:
print(connection.queries)
اگر تعداد Query زیاد باشد، مشکل معمولا از ORM است.
بررسی زمان پاسخ دیتابیس
گاهی مشکل فقط از Admin نیست.
ممکن است:
- دیتابیس کند باشد
- RAM کم باشد
- CPU درگیر شده باشد
روشهای افزایش سرعت Django Admin
برای ForeignKey ها:
list_select_related = ['author']
این یکی از مهمترین روشهای بهینه سازی Admin است.
محدود کردن list_display
نباید دادههای غیر ضروری نمایش داده شوند.
هر ستون اضافه:
- Query بیشتر
- Render سنگینتر
- مصرف RAM بیشتر
ایجاد می کند.
استفاده از raw_id_fields
برای جلوگیری از لود سنگین Dropdown ها:
raw_id_fields = ['author']
این روش مخصوص دیتابیسهای بزرگ خیلی مهم است.
استفاده از autocomplete_fields
روش بهتر:
autocomplete_fields = ['author']
این قابلیت فقط دادههای لازم را لود میکند.
کاهش Query های متدها
اگر متدی داخل list_display دارید:
- Query اضافی نزنید
- دادهها را Cache کنید
- Aggregation انجام دهید
استفاده از Index در دیتابیس
برای فیلدهای:
- Search
- Filter
- Ordering
بهتر است Index تعریف شود.
مثلا:
title = models.CharField(max_length=255, db_index=True)
اشتباهات رایج برنامه نویسان Django
نمایش همه Relationship ها
بعضی پروژهها اطلاعات زیادی داخل Admin نشان میدهند.
نتیجه:
- Query زیاد
- پنل سنگین
- کند شدن شدید
Search روی Text های بزرگ
جستجو روی متن های طولانی Performance را خراب میکند.
استفاده زیاد از Inline ها
مثلا:
TabularInline
اگر تعداد داده زیاد باشد، صفحه بسیار سنگین میشود.
لود تصویرهای سنگین
نمایش تصویرهای بزرگ داخل Admin:
- سرعت لود را کم میکند
- RAM مرورگر را مصرف میکند
روش جلوگیری از کند شدن Django Admin
Query ها را مرتب بررسی کنید
خیلی از مشکلات Performance از Query های اضافی شروع میشوند.
Admin را ساده نگه دارید
Django Admin قرار نیست Dashboard سنگین فرانت اند باشد.
هرچه سادهتر باشد:
- سریعتر است
- نگهداری راحتتر است
- مصرف منابع کمتر میشود
Pagination را جدی بگیرید
نباید هزاران داده همزمان نمایش داده شوند.
از Cache استفاده کنید
برای دادههای تکراری:
- Redis
- Cache داخلی Django
خیلی کمک میکنند.
جمع بندی
افزایش سرعت Django Admin بیشتر از هر چیز به بهینه سازی Query ها و کاهش عملیات سنگین مربوط میشود. استفاده اشتباه از ForeignKey، Query های اضافی و نمایش حجم زیاد داده معمولا دلیل اصلی کند شدن پنل ادمین هستند. اگر Query ها را بهینه کنید و ساختار Admin را سبک نگه دارید، Performance پروژه به شکل محسوسی بهتر میشود.





