كل ما تحتاج ان تعرفه عن : موقع المشرف دجانقو | Django admin site
يمكن لتطبيق المشرف في Django استخدام النماذج الخاصة بك لإنشاء منطقة موقع تلقائيًا يمكنك استخدامها لإنشاء السجلات وعرضها وتحديثها وحذفها. يمكن لهذا أن يوفر لك الكثير من الوقت أثناء التطوير ، مما يجعل اختبار نماذجك أمرًا سهلاً للغاية والتعرف على ما إذا كان لديك البيانات الصحيحة. يمكن أن يكون تطبيق الإدارة مفيدًا أيضًا لإدارة البيانات في الإنتاج ، بناءً على نوع موقع الويب. يوصي مشروع Django باستخدامه فقط لإدارة البيانات الداخلية (على سبيل المثال فقط للاستخدام من قبل المشرفين ، أو الأشخاص الداخليين في مؤسستك) ، نظرًا لأن النهج الذي يركز على النموذج ليس بالضرورة أفضل واجهة ممكنة لجميع المستخدمين ، ويكشف الكثير من التفاصيل غير الضرورية حول النماذج.
كل التهيئة المطلوبة لتضمين التطبيق الإداري في موقع الويب الخاص بك تم إجراؤها تلقائيًا عندما قمت بإنشاء مشروعك من الصفر . نتيجة لذلك ، كل ما يجب عليك فعله لإضافة النماذج الخاصة بك إلى تطبيق المسؤول هو تسجيلها. في نهاية هذه المقالة ، سنقدم عرضًا مختصرًا عن كيفية تهيئتك لمنطقة الإدارة لعرض بيانات نماذجنا بشكل أفضل.
بعد تسجيل النماذج ، سنوضح كيفية إنشاء “مستخدم جديد” جديد ، ثم تسجيل الدخول إلى الموقع ، وإنشاء بعض الكتب والمؤلفين ومثيلات الكتاب والأنواع. سيكون هذا مفيدًا لاختبار طرق العرض والقوالب التي سنبدأ في إنشاءها في البرنامج التعليمي التالي.
تسجيل النماذج | Registering models
أولاً ، افتح admin.py في تطبيق الكتالوج (/locallibrary/catalog/admin.py). يبدو الآن مثل هذا - لاحظ أنه يستورد بالفعل django.contrib.admin:
from django.contrib import admin
Register your models here.
هذا الرمز يستورد النماذج ببساطة ثم يدعو admin.site.register لتسجيل كل منها.
from catalog.models import Author, Genre, Book, BookInstance
admin.site.register(Book)
admin.site.register(Author)
admin.site.register(Genre)
admin.site.register(BookInstance)
هذه هي أبسط طريقة لتسجيل نموذج ، أو نماذج ، مع الموقع. موقع المشرف قابل للتخصيص بدرجة كبيرة ، وسنتحدث أكثر عن الطرق الأخرى لتسجيل النماذج الخاصة بك باستمرار.
انشاء مستخدم متميز | Creating a superuser
لتسجيل الدخول إلى موقع المشرف ، نحتاج إلى حساب مستخدم تم تمكين حالة الموظفين فيه. لعرض السجلات وإنشائها ، نحتاج أيضًا إلى أن يكون لدى هذا المستخدم أذونات لإدارة جميع الكائنات. يمكنك إنشاء حساب “المستخدم المتميز” الذي لديه حق الوصول الكامل إلى الموقع وجميع الأذونات المطلوبة باستخدام إدارة.
اتصل بالأمر التالي ، في نفس الدليل مثل manage.py ، لإنشاء المستخدم المتميز. ستتم مطالبتك بإدخال اسم مستخدم وعنوان بريد إلكتروني وكلمة مرور قوية.
python3 manage.py createsuperuser
بمجرد اكتمال هذا الأمر ، سيتم إضافة مستخدم جديد إلى قاعدة البيانات. الآن أعد تشغيل خادم التطوير حتى نتمكن من اختبار معلومات تسجيل الدخول:
python3 manage.py runserver
تسجيل الدخول واستخدام الموقع | Logging in and using the site
لتسجيل الدخول إلى الموقع ، افتح عنوان / admin URL (على سبيل المثال http://127.0.0.1:8000/admin) وأدخل بيانات اعتماد المستخدم وبيانات كلمة المرور الخاصة بالمستخدم الجديد (ستتم إعادة توجيهك إلى صفحة تسجيل الدخول ، ثم العودة إلى / admin URL بعد إدخال بياناتك).
يعرض هذا الجزء من الموقع جميع نماذجنا ، مجمعة حسب التطبيق المثبت. يمكنك النقر فوق اسم طراز للانتقال إلى شاشة تسرد كافة السجلات المقترنة بها ، ويمكنك النقر فوق تلك السجلات لتحريرها. يمكنك أيضًا النقر مباشرةً فوق الرابط إضافة بجوار كل طراز لبدء إنشاء سجل من هذا النوع.
Admin site
انقر على الرابط إضافة إلى يمين الكتب لإنشاء كتاب جديد (سيعرض هذا مربع حوار يشبه إلى حد كبير العنوان أدناه). لاحظ كيف تطابق عناوين كل حقل ونوع الأداة المستخدمة و help_text (إن وجد) القيم التي حددتها في النموذج.
أدخل قيم للحقول. يمكنك إنشاء مؤلفين أو أنواع جديدة بالضغط على الزر + المجاور للحقول المعنية (أو تحديد القيم الموجودة من القوائم إذا قمت بالفعل بإنشائها). عند الانتهاء ، يمكنك الضغط على حفظ أو حفظ وإضافة آخر ، أو حفظ ومتابعة التعديل لحفظ السجل.
Add a book
عند الانتهاء من إضافة كتب ، انقر فوق ارتباط الصفحة الرئيسية في أعلى الإشارة المرجعية التي سيتم إعادتها إلى صفحة الإدارة الرئيسية. ثم انقر فوق ارتباط الكتب لعرض قائمة الكتب الحالية (أو على أحد الروابط الأخرى لمشاهدة قوائم الطرازات الأخرى). الآن بعد أن أضفت بعض الكتب ، قد تبدو القائمة مشابهة لشاشة الصورة أدناه. يتم عرض عنوان كل كتاب. هذه هي القيمة التي يتم إرجاعها في طريقة __str __ () لطراز الكتاب التي حددناها في المقالة الأخيرة.
books
من هذه القائمة ، يمكنك حذف الكتب عن طريق تحديد مربع الاختيار بجوار الكتاب الذي لا تريده ، وتحديد delete… action من القائمة المنسدلة الإجراء ، ثم الضغط على الزر Go. يمكنك أيضًا إضافة كتب جديدة بالضغط على الزر ADD BOOK.
يمكنك تحرير كتاب عن طريق تحديد اسمه في الرابط. تعد صفحة تعديل الكتاب الموضحة أدناه مطابقة تقريبًا لصفحة “إضافة”. الاختلافات الرئيسية هي عنوان الصفحة (تغيير الكتاب) وإضافة الزر “حذف” و “التاريخ” و “عرض على الموقع” (يظهر هذا الزر الأخير لأننا قمنا بتعريف طريقة get_absolute_url () في النموذج الخاص بنا).
Edit book
الآن انتقل مرة أخرى إلى الصفحة الرئيسية (باستخدام رابط الصفحة الرئيسية مسار التنقل) ثم قم بعرض قوائم المؤلفين و النوع - يجب أن يكون لديك بالفعل عدد قليل من تلك التي تم إنشاؤها عندما أضفت الكتب الجديدة ، ولكن لا تتردد في إضافة المزيد منها.
ما لا تملكه هو أي مثيلات كتاب ، لأن هذه لا يتم إنشاؤها من الكتب (على الرغم من أنه يمكنك إنشاء كتاب من BookInstance - هذه هي طبيعة الحقل ForeignKey). انتقل مرة أخرى إلى الصفحة الرئيسية واضغط على الزر Add المقترن لعرض شاشة Add book instance أدناه. لاحظ الرقم التعريفي الكبير والفريد عالميًا ، والذي يمكن استخدامه لتعريف نسخة واحدة من كتاب في المكتبة بشكل منفصل.
book instance model
أنشئ عددًا من هذه السجلات لكل كتاب من كتبك. اضبط الحالة على أنها متوفرة على الأقل لبعض السجلات وعلى سبيل الاعارة للآخرين. إذا كانت الحالة غير متوفرة ، فقم أيضًا بتعيين تاريخ الاستحقاق المستحق.
هذا هو! لقد تعلمت الآن كيفية إعداد موقع الإدارة واستخدامه. لقد قمت أيضًا بإنشاء سجلات لكل من Book و BookInstance و Genre و Author التي سنتمكن من استخدامها بمجرد إنشاء طرق العرض والقوالب الخاصة بنا.
اعدادات متقدمه | Advanced configuration
يقوم Django بعمل جيد لإنشاء موقع مسؤول أساسي باستخدام المعلومات من النماذج المسجلة:
- يحتوي كل نموذج على قائمة بالسجلات الفردية ، التي تم تحديدها بواسطة السلسلة التي تم إنشاؤها باستخدام طريقة __str __ () للطراز ، ومربوطة بعروض / نماذج التفاصيل للتحرير. بشكل افتراضي ، يحتوي هذا العرض على قائمة إجراءات في الأعلى يمكنك استخدامها لإجراء عمليات حذف مجمعة في السجلات.
- تحتوي نماذج سجل تفاصيل النموذج لتحرير وإضافة السجلات على جميع الحقول الموجودة في النموذج ، والتي يتم وضعها عموديًا في ترتيب التصريح الخاص بها.
يمكنك أيضًا تخصيص الواجهة لتسهيل استخدامها. بعض الأشياء التي يمكنك القيام بها هي:
-
طرق عرض القائمة:
- أضف حقول / معلومات إضافية معروضة لكل سجل.
- أضف فلاتر لتحديد السجلات المسردة ، بناءً على التاريخ أو بعض قيم التحديد الأخرى (مثل حالة قرض الكتاب).
- أضف خيارات إضافية إلى قائمة الإجراءات في طرق عرض القائمة واختر مكان عرض هذه القائمة في النموذج.
-
عرض التفاصيل:
- اختر الحقول المطلوب عرضها (أو استبعادها) ، مع ترتيبها ، وتجميعها ، وما إذا كانت قابلة للتحرير ، والقطعة المستخدمة ، والتوجيه وما إلى ذلك.
- أضف الحقول ذات الصلة إلى سجل للسماح بالتحرير المضمن (على سبيل المثال ، أضف القدرة على إضافة وتحرير سجلات الكتب أثناء إنشاء سجل المؤلف).
تسجيل فئة النماذج | Register a ModelAdmin class
لتغيير كيفية عرض نموذج في واجهة الإدارة ، قم بتعريف فئة ModelAdmin (التي تصف التخطيط) وقم بتسجيلها باستخدام الطراز.
لنبدأ بنموذج المؤلف. افتح admin.py في تطبيق الكتالوج (/locallibrary/catalog/admin.py). قم بالتعليق على تسجيلك الأصلي (بادئة بـ #) لنموذج المؤلف:
admin.site.register(Author)
الآن إضافة AuthorAdmin جديد والتسجيل كما هو موضح أدناه.
Define the admin class
class AuthorAdmin(admin.ModelAdmin):
pass
Register the admin class with the associated model
admin.site.register(Author, AuthorAdmin
الآن سنقوم بإضافة فئات ModelAdmin للكتاب ، BookInstance. نحتاج مرة أخرى للتعليق على التسجيلات الأصلية:
admin.site.register(Book)
admin.site.register(BookInstance)
الآن لإنشاء وتسجيل النماذج الجديدة ؛ لغرض هذا العرض التوضيحي ، سنستخدم بدلاً من ذلك ديكورregister لتسجيل النماذج (وهذا يفعل نفس الشيء تمامًا مثل بناء admin.site.register ()):
Register the Admin classes for Book using the decorator
@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
pass
Register the Admin classes for BookInstance using the decorator
@admin.register(BookInstance)
class BookInstanceAdmin(admin.ModelAdmin):
pass
في الوقت الحالي ، تكون جميع فئات المشرف لدينا فارغة (انظر التمريرة) حتى لا يتغير سلوك المشرف! يمكننا الآن توسيع هذه لتعريف السلوك الإداري الخاص بنا النموذجية.
اعداد طرق عرض القائمة | Configure list views
تسرد المكتبة المحلية حاليًا جميع المؤلفين الذين يستخدمون اسم الكائن المتولد من نموذج __str __ () للطراز. هذا جيد عندما يكون لديك عدد قليل من المؤلفين ، ولكن بمجرد أن يكون لديك العديد من الأشخاص قد ينتهي بك الأمر إلى الحصول على نسخ مكررة. للتمييز بينها ، أو لمجرد أنك تريد عرض معلومات أكثر إثارة للاهتمام حول كل مؤلف ، يمكنك استخدام list_display لإضافة حقول إضافية إلى طريقة العرض.
استبدل فئة AuthorAdmin برمز أدناه. يتم الإعلان عن أسماء الحقول التي سيتم عرضها في القائمة في مجموعة حروف بالترتيب المطلوب ، كما هو موضح (هذه هي نفس الأسماء المحددة في النموذج الأصلي الخاص بك).
class AuthorAdmin(admin.ModelAdmin):
list_display = (‘last_name’, ‘first_name’, ‘date_of_birth’, ‘date_of_death’)
انتقل الآن إلى قائمة المؤلفين في موقعك على الويب.
بالنسبة لنموذج الكتاب ، سنقوم أيضًا بعرض المؤلف والنوع. المؤلف هو عبارة عن علاقة حقل ForeignKey (واحد إلى واحد) ، وبالتالي سيتم تمثيله بقيمة __str __ () للسجل المرتبط. استبدل فئة BookAdmin بالإصدار أدناه.
class BookAdmin(admin.ModelAdmin):
list_display = (‘title’, ‘author’, ‘display_genre’)
للأسف ، لا يمكننا تحديد حقل النوع بشكل مباشر في list_display لأنه برنامج ManyToManyField (يمنع Django ذلك لأنه سيكون هناك وصول كبير لقاعدة البيانات “التكلفة” في القيام بذلك). بدلاً من ذلك ، سنقوم بتعريف دالة display_genre للحصول على المعلومات كسلسلة (هذه هي الوظيفة التي اتصلنا بها أعلاه ؛ وسنقوم بتعريفها أدناه).
يؤدي هذا إلى إنشاء سلسلة من القيم الثلاثة الأولى من حقل النوع (إذا كانت موجودة) وإنشاء اختصار قصير يمكن استخدامه في موقع المشرف لهذه الطريقة.
def display_genre(self):
“”“Create a string for the Genre. This is required to display genre in Admin.”""
return ', '.join(genre.name for genre in self.genre.all()[:3])
display_genre.short_description = ‘Genre’
بعد حفظ النموذج والمشرف المحدث ، افتح موقع الويب وانتقل إلى صفحة قائمة الكتب.
يحتوي كل من نموذج النوع (ونموذج اللغة ، إذا حددت أحدهما) على حقل واحد ، لذلك ليس هناك نقطة لإنشاء نموذج إضافي لعرضها لحقول إضافية.
إضافة قائمة فلاتر البحث | Add list filters
بمجرد حصولك على الكثير من العناصر في قائمة ، قد يكون من المفيد أن تكون قادرًا على تصفية العناصر المعروضة. يتم ذلك عن طريق سرد الحقول في سمة list_filter. استبدال فئة BookInstanceAdmin الحالية مع جزء التعليمات البرمجية أدناه.
class BookInstanceAdmin(admin.ModelAdmin):
list_filter = (‘status’, ‘due_back’)
سيتضمن عرض القائمة الآن مربع تصفية إلى اليمين. لاحظ كيف يمكنك اختيار التواريخ والحالة لتصفية القيم:
search list
تنظيم تخطيط عرض التفاصيل | Organise detail view layout
بشكل افتراضي ، تقوم طرق عرض التفاصيل بوضع جميع الحقول رأسياً ، في ترتيب الإعلان الخاص بها في النموذج. يمكنك تغيير ترتيب التصريح ، أي الحقول يتم عرضها (أو استبعادها) ، سواء تم استخدام الأقسام لتنظيم المعلومات ، وما إذا كانت الحقول معروضة أفقيًا أو رأسيًا ، وحتى أدوات التعديل المستخدمة في نماذج المشرف.
السيطرة على المجالات التي يتم عرضها ووضعها
قم بتحديث فئة AuthorAdmin الخاصة بك لإضافة سطر الحقول ، كما هو موضح أدناه (بالخط الغامق):
class AuthorAdmin(admin.ModelAdmin):
list_display = (‘last_name’, ‘first_name’, ‘date_of_birth’, ‘date_of_death’)
fields = [‘first_name’, ‘last_name’, (‘date_of_birth’, ‘date_of_death’)]
تسرد خاصية الحقول فقط تلك الحقول التي سيتم عرضها في النموذج ، بالترتيب. يتم عرض الحقول عموديًا بشكل افتراضي ، ولكن سيتم عرضها أفقيًا إذا قمت بتجميعها في مجموعة (كما هو موضح في حقول “التاريخ” أعلاه).
في موقعك على الويب ، انتقل إلى عرض تفاصيل المؤلف
تقسيم عرض التفاصيل
يمكنك إضافة “أقسام” لتجميع معلومات النماذج ذات الصلة في نموذج التفاصيل ، باستخدام سمة الحقول.
في نموذج BookInstance لدينا معلومات تتعلق بماهية الكتاب (أي الاسم ، والبصمة ، والمعرف) وعندما يكون متاحًا (status، due_back). يمكننا إضافة هذه المقاطع في أقسام مختلفة عن طريق إضافة النص بالخط العريض إلى فئة BookInstanceAdmin.
@admin.register(BookInstance)
class BookInstanceAdmin(admin.ModelAdmin):
list_filter = (‘status’, ‘due_back’)
fieldsets = (
(None, {
‘fields’: (‘book’, ‘imprint’, ‘id’)
}),
(‘Availability’, {
‘fields’: (‘status’, ‘due_back’)
}),
)
يحتوي كل قسم على عنوانه الخاص (أو لا شيء ، إذا كنت لا تريد عنوانًا) ومجموعة مضافة من الحقول في القاموس - يكون التنسيق معقدًا ، ولكن يسهل فهمه إلى حد ما إذا نظرت إلى جزء الشفرة مباشرة .
انتقل الآن إلى عرض مثيل الكتاب في موقعك على الويب ؛ يجب أن يظهر النموذج كما هو موضح أدناه:
custom detail view
التعديل المضمن للسجلات المرتبطة | Inline editing of associated records
قد يكون من المنطقي في بعض الأحيان أن تتمكن من إضافة سجلات مرتبطة في نفس الوقت. على سبيل المثال ، قد يكون من المنطقي أن يكون لديك معلومات ومعلومات عن النسخ المحددة التي حصلت عليها في صفحة التفاصيل نفسها.
يمكنك القيام بذلك عن طريق التصريح عن الحروف ، من النوع TabularInline (تخطيط horizonal) أو StackedInline (تخطيط عمودي ، مثل تخطيط النموذج الافتراضي). يمكنك إضافة معلومات BookInstance مضمنة إلى تفاصيل الكتاب الخاص بنا عن طريق إضافة الأسطر أدناه بخط غامق بالقرب من BookAdmin:
class BooksInstanceInline(admin.TabularInline):
model = BookInstance
@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
list_display = (‘title’, ‘author’, ‘display_genre’)
inlines = [BooksInstanceInline]
كل ما قمنا به هو إعلان الطبقة المضمنة في الجدول ، والتي تضيف فقط كل الحقول من النموذج المضمن. يمكنك تحديد كل أنواع المعلومات الإضافية الخاصة بالتخطيط ، بما في ذلك الحقول المراد عرضها ، وترتيبها ، وما إذا كانت للقراءة فقط أم لا ، وما إلى ذلك. (راجع TabularInline لمزيد من المعلومات).