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 پنل ادمین را با استفاده از سیستم قالب جنگو تغییر دهید.

 

گام‌ها:

  1. ساخت پوشه templates/admin در پروژه

  2. کپی فایل base_site.html از مسیر:
    django/contrib/admin/templates/admin/base_site.html

  3. ویرایش عبارت زیر در فایل:

				
					<div id="site-name"><a href="{% url 'admin:index' %}">مدیریت نظرسنجی‌ها</a></div>

				
			

 

برای شناسایی مسیر نصب Django:

				
					python -c "import django; print(django.__path__)"

				
			

 

ویرایش صفحه اصلی مدیریت (Admin Index)

 

برای سفارشی‌سازی صفحه اصلی:

  • فایل index.html را از دایرکتوری پیش‌فرض کپی کرده و در مسیر templates/admin/ قرار دهید.

  • به‌جای استفاده از app_list، می‌توانید لینک‌های اختصاصی برای مدل‌ها قرار دهید.


 

جمع‌بندی

 

با استفاده از قابلیت‌های موجود در Admin Django، می‌توانید تجربه مدیریت داده‌ها را به شکل چشمگیری بهبود ببخشید. در این آموزش:

  • فرم‌ها را سفارشی کردیم

  • روابط مدل‌ها را به‌صورت Inline نمایش دادیم

  • ظاهر پنل را با استفاده از قالب‌های اختصاصی شخصی‌سازی کردیم

  • قابلیت جستجو، فیلتر و مرتب‌سازی را افزودیم

0 دیدگاه