16- ساخت اولین اپلیکیشن در جنگو(7) (صفحه ادمین):
۰۹ تیر ۱۴۰۴

0 دیدگاه
آموزش Django: ساخت اولین اپلیکیشن – قسمت هفتم
شخصیسازی پنل مدیریت (Admin) جنگو
در این بخش از مجموعه آموزش Django، به سراغ شخصیسازی پنل مدیریت (Admin Site) میرویم تا تجربه کاربری بهتری را هنگام مدیریت مدلها فراهم کنیم.
مقدمه
اگر قسمت ششم این آموزش را دنبال کرده باشید، تا اینجا یک اپلیکیشن نظرسنجی ساده با مدلهای Question و Choice ساختهاید. حالا وقت آن است که ظاهر و عملکرد پنل مدیریت جنگو را بهبود ببخشیم تا مدیریت محتوا راحتتر و حرفهایتر شود.
شخصیسازی فرمهای مدیریت
جنگو هنگام ثبت مدل با کدی مثل:
admin.site.register(Question)
مثال: تغییر ترتیب فیلدها
class QuestionAdmin(admin.ModelAdmin):
fields = ['pub_date', 'question_text']
admin.site.register(Question, QuestionAdmin)
در این مثال، فیلد pub_date قبل از question_text نمایش داده میشود.
افزودن آبجکتهای مرتبط در پنل ادمین
مدل Choice به صورت ForeignKey به Question متصل است. برای افزودن Choice به پنل مدیریت دو روش وجود دارد:
1. ثبت جداگانه مدل Choice:
admin.site.register(Choice)
در این صورت، فیلدی از نوع <select> برای انتخاب سوال مربوطه نمایش داده میشود.
2. افزودن فرمهای مرتبط به صورت Inline
روش حرفهایتر این است که فرمهای Choice را مستقیماً در صفحه افزودن/ویرایش Question نمایش دهیم.
python
class ChoiceInline(admin.StackedInline):
model = Choice
extra = 3
class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['question_text']}),
('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
]
inlines = [ChoiceInline]
admin.site.register(Question, QuestionAdmin)
برای نمایش فشردهتر از TabularInline استفاده کنید:
python
class ChoiceInline(admin.TabularInline):
model = Choice
extra = 3
اصلاح لیست تغییرات (Change List)
صفحهای که لیست تمام Questionها را نمایش میدهد، قابل شخصیسازی است.
نمایش فیلدهای خاص:
class QuestionAdmin(admin.ModelAdmin):
list_display = ['question_text', 'pub_date']
افزودن متد سفارشی:
@admin.display(boolean=True, ordering='pub_date', description='Published recently?')
def was_published_recently(self):
now = timezone.now()
return now - timedelta(days=1) <= self.pub_date <= now
class QuestionAdmin(admin.ModelAdmin):
list_display = ['question_text', 'pub_date', 'was_published_recently']
افزودن قابلیت جستجو و فیلتر
برای کاربرپسندتر شدن صفحه مدیریت:
فیلتر بر اساس تاریخ انتشار:
list_filter = ['pub_date']
افزودن جستجو بر اساس متن سوال:
search_fields = ['question_text']
شخصیسازی ظاهر پنل مدیریت
شما میتوانید قالبهای HTML پنل ادمین را با استفاده از سیستم قالب جنگو تغییر دهید.
گامها:
ساخت پوشه
templates/adminدر پروژهکپی فایل
base_site.htmlاز مسیر:django/contrib/admin/templates/admin/base_site.htmlویرایش عبارت زیر در فایل:
برای شناسایی مسیر نصب Django:
python -c "import django; print(django.__path__)"
ویرایش صفحه اصلی مدیریت (Admin Index)
برای سفارشیسازی صفحه اصلی:
فایل
index.htmlرا از دایرکتوری پیشفرض کپی کرده و در مسیرtemplates/admin/قرار دهید.بهجای استفاده از
app_list، میتوانید لینکهای اختصاصی برای مدلها قرار دهید.
جمعبندی
با استفاده از قابلیتهای موجود در Admin Django، میتوانید تجربه مدیریت دادهها را به شکل چشمگیری بهبود ببخشید. در این آموزش:
فرمها را سفارشی کردیم
روابط مدلها را بهصورت Inline نمایش دادیم
ظاهر پنل را با استفاده از قالبهای اختصاصی شخصیسازی کردیم
قابلیت جستجو، فیلتر و مرتبسازی را افزودیم
0 دیدگاه