يسلط الضوء على Django: النماذج والمسؤول وتسخير قاعدة البيانات العلائقية (الجزء 3)
نشرت: 2022-03-10قبل أن نبدأ ، أود أن أشير إلى أن القدرات الإدارية المضمنة في Django ، حتى بعد التخصيص ، ليست مخصصة للمستخدمين النهائيين. توجد لوحة الإدارة كمطور ومشغل وأداة مسؤول لإنشاء البرامج وصيانتها. لا يُقصد استخدامها لمنح المستخدمين النهائيين إمكانيات الإشراف أو أي قدرات إدارية أخرى عبر النظام الأساسي الذي تقوم بتطويره.
تستند هذه المقالة إلى فرضية في جزأين:
- لوحة إدارة Django بديهية للغاية لدرجة أنك تعرف بالفعل كيفية استخدامها.
- لوحة إدارة Django قوية للغاية بحيث يمكننا استخدامها كأداة للتعرف على تمثيل البيانات في قاعدة بيانات علائقية باستخدام نموذج Django.
أعرض هذه الأفكار مع التنبيه على أننا سنظل بحاجة إلى كتابة بعض أكواد التكوين لتفعيل قدرات لوحة الإدارة الأكثر قوة ، وسنظل بحاجة إلى استخدام ORM المستندة إلى نماذج Django (رسم الخرائط العلائقية للكائنات) لتحديد تمثيل البيانات في نظامنا.
اقتراحات للقراءة
“Django Highlights” هي سلسلة تقدم مفاهيم مهمة لتطوير الويب في Django. قد ترغب في القراءة عن توفير تدفقات مصادقة آمنة للمستخدم والمتابعة جنبًا إلى جنب مع عرض توضيحي حول استخدام قالب Django لكتابة صفحات معقدة.
اعداد
سنعمل مع نموذج مشروع في هذه المقالة. يقوم المشروع بنمذجة بعض البيانات التي يمكن أن تخزنها المكتبة حول الكتب والمستفيدين. يجب أن يكون المثال قابلاً للتطبيق إلى حد ما على العديد من أنواع الأنظمة التي تدير المستخدمين و / أو المخزون. إليك نظرة سريعة على شكل البيانات:
يرجى إكمال الخطوات التالية لتشغيل مثال الرمز على جهازك المحلي.
1. تثبيت الحزم
مع تثبيت Python 3.6 أو أعلى ، قم بإنشاء دليل وبيئة افتراضية. ثم قم بتثبيت الحزم التالية:
pip install django django-grappelli
Django هو إطار عمل الويب الذي نعمل معه في هذه المقالة. ( django-grappelli
هو سمة لوحة تحكم سنغطيها بإيجاز.)
2. الحصول على المشروع
بعد تثبيت الحزم السابقة ، قم بتنزيل رمز المثال من GitHub. يركض:
git clone https://github.com/philipkiely/library_records.git cd library_records/library
3. إنشاء مستخدم متميز
باستخدام الأوامر التالية ، قم بإعداد قاعدة البيانات الخاصة بك وإنشاء مستخدم متميز. ستوجهك واجهة سطر الأوامر خلال عملية إنشاء مستخدم متميز. سيكون حساب المستخدم المتميز الخاص بك هو كيفية وصولك إلى لوحة الإدارة في لحظة ، لذا تأكد من تذكر كلمة المرور التي قمت بتعيينها. يستخدم:
python manage.py migrate python manage.py createsuperuser
4. تحميل البيانات
من أجل استكشافنا ، قمت بإنشاء مجموعة بيانات تسمى تركيبات يمكنك تحميلها في قاعدة البيانات (المزيد حول كيفية إنشاء تركيبات في نهاية المقالة). استخدم الأداة لتعبئة قاعدة البيانات الخاصة بك قبل استكشافها في لوحة الإدارة. يركض:
python manage.py loaddata ../fixture.json
5. تشغيل مشروع المثال
أخيرًا ، أنت جاهز لتشغيل رمز المثال. لتشغيل الخادم ، استخدم الأمر التالي:
python manage.py runserver
افتح المستعرض الخاص بك على https://127.0.0.1:8000 لعرض المشروع. لاحظ أنه تتم إعادة توجيهك تلقائيًا إلى لوحة الإدارة في / admin / . لقد أنجزت ذلك باستخدام التكوين التالي في library / urls.py :
from django.contrib import admin from django.urls import path from records import views urlpatterns = [ path('admin/', admin.site.urls), path('', views.index), ]
مقترنًا بإعادة التوجيه البسيطة التالية في records / views.py :
from django.http import HttpResponseRedirect def index(request): return HttpResponseRedirect('/admin/')
باستخدام لوحة الإدارة
لقد نجحنا! عند تحميل صفحتك ، يجب أن ترى شيئًا مشابهًا لما يلي:
يتم إنجاز هذا العرض باستخدام الكود المعياري التالي في السجلات / admin.py :
from django.contrib import admin from .models import Book, Patron, Copy admin.site.register(Book) admin.site.register(Copy) admin.site.register(Patron)
يجب أن يمنحك هذا العرض فهمًا أوليًا للبيانات التي يخزنها النظام. سأزيل بعض الغموض: يتم تحديد Groups
Users
بواسطة Django ويقومون بتخزين المعلومات والأذونات للحسابات على النظام. يمكنك قراءة المزيد عن نموذج User
في مقالة سابقة في هذه السلسلة. Books
و Copys
و Patrons
هي جداول في قاعدة البيانات أنشأناها عند تشغيل عمليات الترحيل وتم تعبئتها عن طريق تحميل الأداة. لاحظ أن Django يجمع أسماء النماذج بسذاجة من خلال إلحاق "s" ، حتى في حالات مثل "copys" حيث يكون التهجئة غير صحيحة.
في مشروعنا ، Book
عبارة عن سجل له عنوان ومؤلف وتاريخ نشر ورقم ISBN (رقم الكتاب القياسي الدولي). تحتفظ المكتبة Copy
من كل Book
، أو ربما عدة نسخ. يمكن سحب كل Copy
بواسطة Patron
، أو يمكن حاليًا إيداعها. Patron
هو امتداد User
يسجل عنوانه وتاريخ ميلاده.
إنشاء ، قراءة ، تحديث ، تدمير
تتمثل إحدى الإمكانيات القياسية للوحة الإدارة في إضافة مثيلات لكل نموذج. انقر فوق "كتب" للوصول إلى صفحة النموذج ، وانقر فوق الزر "إضافة كتاب" في الزاوية العلوية اليمنى. سيؤدي القيام بذلك إلى سحب نموذج يمكنك ملؤه وحفظه لإنشاء كتاب.
يكشف إنشاء Patron
عن قدرة مضمنة أخرى في نموذج إنشاء المسؤول: يمكنك إنشاء النموذج المتصل مباشرة من نفس النموذج. تُظهر لقطة الشاشة أدناه النافذة المنبثقة التي يتم تشغيلها بواسطة علامة الجمع الخضراء الموجودة على يمين القائمة المنسدلة User
. وبالتالي ، يمكنك إنشاء كلا النموذجين على نفس صفحة المسؤول.
يمكنك إنشاء COPY
عبر نفس الآلية.
لكل سجل ، يمكنك النقر فوق الصف لتحريره باستخدام نفس النموذج. يمكنك أيضًا حذف السجلات باستخدام إجراء المسؤول.
إجراءات المسؤول
على الرغم من أن الإمكانات المضمنة في لوحة الإدارة مفيدة على نطاق واسع ، إلا أنه يمكنك إنشاء أدواتك الخاصة باستخدام إجراءات المسؤول. سنقوم بإنشاء اثنين: واحد لإنشاء نسخ من الكتب والآخر لإيداع الكتب التي تم إرجاعها إلى المكتبة.
لإنشاء Copy
من Book
، انتقل إلى URL /admin/records/book/
واستخدم القائمة المنسدلة "Action" لتحديد "Add a copy of book (s)" ثم استخدم مربعات الاختيار في العمود الأيسر من الجدول لتحديد الكتاب أو الكتب المراد إضافة نسخة منها إلى قائمة الجرد.
يعتمد إنشاء هذا على طريقة نموذجية سنغطيها لاحقًا. يمكننا تسميته كإجراء مسؤول عن طريق إنشاء فئة ModelAdmin
لنموذج Profile
التعريف على النحو التالي في السجلات / admin.py :
from django.contrib import admin from .models import Book, Patron, Copy class BookAdmin(admin.ModelAdmin): list_display = ("title", "author", "published") actions = ["make_copys"] def make_copys(self, request, queryset): for q in queryset: q.make_copy() self.message_user(request, "copy(s) created") make_copys.short_description = "Add a copy of book(s)" admin.site.register(Book, BookAdmin)
تشير الخاصية list_display
إلى الحقول المستخدمة لتمثيل النموذج في صفحة نظرة عامة على النموذج. تسرد خاصية actions
إجراءات المسؤول. يتم تعريف إجراء المسؤول لدينا على أنه وظيفة داخل BookAdmin
ويستغرق ثلاث وسائط: كائن المسؤول نفسه ، والطلب (طلب HTTP الفعلي الذي أرسله العميل) ، ومجموعة الاستعلام (قائمة الكائنات التي تم تحديد مربعاتها). نقوم بتنفيذ نفس الإجراء على كل عنصر في مجموعة الاستعلام ، ثم نبلغ المستخدم بأن الإجراءات قد اكتملت. يتطلب كل إجراء مسؤول وصفًا موجزًا حتى يمكن تحديده بشكل صحيح في القائمة المنسدلة. أخيرًا ، نضيف الآن BookAdmin
عند تسجيل النموذج.
تعد كتابة إجراءات المسؤول لتعيين الخصائص بشكل مجمّع أمرًا متكررًا جدًا. إليك رمز التحقق في Copy
، لاحظ تكافؤها القريب للإجراء السابق.
from django.contrib import admin from .models import Book, Patron, Copy class CopyAdmin(admin.ModelAdmin): actions = ["check_in_copys"] def check_in_copys(self, request, queryset): for q in queryset: q.check_in() self.message_user(request, "copy(s) checked in") check_in_copys.short_description = "Check in copy(s)" admin.site.register(Copy, CopyAdmin)
موضوع المسؤول
بشكل افتراضي ، يوفر Django أنماطًا بسيطة إلى حد ما للوحة الإدارة. يمكنك إنشاء المظهر الخاص بك أو استخدام سمة جهة خارجية لمنح لوحة الإدارة مظهرًا جديدًا. أحد الموضوعات الشائعة مفتوحة المصدر هو Grappelli ، والذي قمنا بتثبيته مسبقًا في المقالة. يمكنك التحقق من الوثائق لإمكانياتها الكاملة.
يعد تثبيت السمة أمرًا بسيطًا جدًا ، ولا يتطلب سوى سطرين. أولاً ، أضف grappelli
إلى INSTALLED_APPS
على النحو التالي في library / settings.py :
INSTALLED_APPS = [ 'grappelli', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'records', ]
بعد ذلك ، اضبط Library / urls.py :
from django.contrib import admin from django.urls import path, include from records import views urlpatterns = [ path('grappelli/', include('grappelli.urls')), path('admin/', admin.site.urls), path('', views.index), ]
مع تطبيق هذه التغييرات ، يجب أن تبدو لوحة الإدارة كما يلي:
هناك عدد من السمات الأخرى ، ومرة أخرى يمكنك تطوير سماتك الخاصة. سألتزم بالمظهر الافتراضي لبقية هذه المقالة.
فهم النماذج
الآن بعد أن أصبحت مرتاحًا مع لوحة الإدارة واستخدامها للتنقل في البيانات ، دعنا نلقي نظرة على النماذج التي تحدد بنية قاعدة البيانات الخاصة بنا. يمثل كل نموذج جدولًا واحدًا في قاعدة بيانات علائقية.
تقوم قاعدة البيانات العلائقية بتخزين البيانات في جدول واحد أو أكثر. يحتوي كل جدول من هذه الجداول على هيكل عمود محدد ، بما في ذلك مفتاح أساسي (معرف فريد لكل عنصر) وعمود واحد أو أكثر من القيم ، والتي تكون من أنواع مختلفة مثل السلاسل والأعداد الصحيحة والتواريخ. يتم تمثيل كل عنصر مخزن في قاعدة البيانات كصف واحد. يأتي الجزء "العلائقي" من الاسم مما يمكن القول أنه أهم ميزة للتكنولوجيا: إنشاء علاقات بين الجداول. يمكن أن يحتوي الكائن (الصف) على تعيين رأس برأس أو رأس بأطراف (مفتاح خارجي) أو تعيين متعدد بأطراف إلى صفوف في جداول أخرى. سنناقش هذا بمزيد من التفصيل في الأمثلة.
يستخدم Django افتراضيًا SQLite3 للتطوير. SQLite3 هو محرك قاعدة بيانات علائقية بسيط ويتم إنشاء قاعدة بياناتك تلقائيًا باسم db.sqlite3 في المرة الأولى التي تقوم فيها بتشغيل python manage.py migrate
. سنستمر مع SQLite3 لهذه المقالة ، لكنها ليست مناسبة للاستخدام الإنتاجي ، ويرجع ذلك أساسًا إلى إمكانية الكتابة فوقها مع المستخدمين المتزامنين. في الإنتاج أو عند كتابة نظام تنوي يومًا ما نشره ، استخدم PostgreSQL أو MySQL.
يستخدم Django نماذج للتفاعل مع قاعدة البيانات. باستخدام جزء من ORM في Django ، يشتمل ملف السجلات / Models.py على نماذج متعددة ، مما يسمح بتحديد الحقول والخصائص والطرق لكل كائن. عند إنشاء النماذج ، نسعى جاهدين للحصول على بنية "نموذج فات" ، في حدود المعقول. وهذا يعني أنه يجب التعامل مع أكبر قدر ممكن من التحقق من صحة البيانات ، والتحليل ، والمعالجة ، ومنطق العمل ، ومعالجة الاستثناءات ، ودقة حالة الحافة ، والمهام المماثلة قدر الإمكان في مواصفات النموذج نفسه. تحت الغطاء ، تعد نماذج Django كائنات معقدة للغاية وذات سمات مميزة وسلوك افتراضي مفيد على نطاق واسع. هذا يجعل من السهل تحقيق هندسة "نموذج الدهون" حتى بدون كتابة قدر كبير من التعليمات البرمجية.
دعنا نتصفح النماذج الثلاثة في تطبيقنا النموذجي. لا يمكننا تغطية كل شيء ، حيث من المفترض أن يكون هذا مقالًا تمهيديًا ، وليس التوثيق الكامل لإطار عمل Django ، لكنني سأسلط الضوء على أهم الخيارات التي قمت بها في بناء هذه النماذج البسيطة.
تعتبر فئة Book
هي الأكثر وضوحًا بين النماذج. ها هو من السجلات / Models.py :
from django.db import models class Book(models.Model): title = models.CharField(max_length=300) author = models.CharField(max_length=150) published = models.DateField() isbn = models.IntegerField(unique=True) def __str__(self): return self.title + " by " + self.author def make_copy(self): Copy.objects.create(book=self)
تتطلب كافة حقول CharField
max_length
. الطول التقليدي هو 150 حرفًا ، والتي قمت بمضاعفتها للحصول على title
في حالة العناوين الطويلة جدًا. بالطبع ، لا يزال هناك حد تعسفي يمكن تجاوزه. لطول النص غير المحدود ، استخدم TextField
. الحقل published
هو حقل DateField
. لا يهم وقت نشر الكتاب ، ولكن إذا حدث ذلك ، فسوف أستخدم DateTimeField
. أخيرًا ، رقم ISBN هو عدد صحيح (أرقام ISBN تتكون من 10 أو 13 رقمًا وبالتالي تتناسب جميعها مع القيمة القصوى لعدد صحيح) ونستخدم unique=True
لأنه لا يمكن أن يكون لكتابان نفس رقم ISBN ، والذي يتم فرضه بعد ذلك على مستوى قاعدة البيانات.
تحتوي جميع الكائنات على طريقة __str__(self)
تحدد تمثيل السلسلة الخاصة بها. نتجاوز التنفيذ الافتراضي الذي توفره فئة models.Model
بدلاً من ذلك بتمثيل الكتب كـ "عنوان بالمؤلف" في جميع الأماكن التي يتم فيها تمثيل النموذج كسلسلة. تذكر أننا استخدمنا في السابق list_display
في كائن إدارة Book
لتحديد الحقول التي ستظهر في قائمة لوحة الإدارة. إذا لم تكن list_display
موجودة ، فإن قائمة الإدارة تعرض بدلاً من ذلك تمثيل السلسلة للنموذج ، كما هو الحال لكل من Patron
Copy
.
أخيرًا ، لدينا طريقة على Book
استدعيناها في إجراء المشرف الذي كتبناه سابقًا. تقوم هذه الوظيفة بإنشاء Copy
مرتبطة بمثيل معين Book
في قاعدة البيانات.
بالانتقال إلى Patron
، يقدم هذا النموذج مفهوم علاقة واحد لواحد ، في هذه الحالة مع نموذج User
المدمج. تحقق من ذلك من السجلات / Models.py :
from django.db import models from django.contrib.auth.models import User class Patron(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) address = models.CharField(max_length=150) dob = models.DateField() def __str__(self): return self.user.username
حقل user
ليس بالضبط دالة حيوية. يمكن أن يكون هناك مثيل User
بدون مثيل Patron
مرتبط. ومع ذلك ، لا يمكن ربط User
بأكثر من مثيل Patron
واحد ، ولا يمكن Patron
أن يوجد بدون علاقة واحدة بالضبط بالمستخدم. يتم فرض ذلك على مستوى قاعدة البيانات ، ويتم ضمانه من خلال on_delete=models.CASCADE
المواصفات: إذا تم حذف نسخة User
، فسيتم حذف Profile
التعريف المرتبط.
الحقول الأخرى __str__(self)
التي رأيناها من قبل. تجدر الإشارة إلى أنه يمكنك الوصول من خلال علاقة رأس برأس للحصول على سمات ، في هذه الحالة user.username
، في وظائف النموذج.
للتوسع في فائدة علاقات قاعدة البيانات ، دعنا نوجه انتباهنا إلى Copy
from records / Models.py :
from django.db import models class Copy(models.Model): book = models.ForeignKey(Book, on_delete=models.CASCADE) out_to = models.ForeignKey(Patron, blank=True, null=True, on_delete=models.SET_NULL) def __str__(self): has_copy = "checked in" if self.out_to: has_copy = self.out_to.user.username return self.book.title + " -> " + has_copy def check_out(self, p): self.out_to = p self.save() def check_in(self): self.out_to = None self.save()
مرة أخرى ، لقد رأينا معظم هذا من قبل ، لذلك دعونا نركز على الأشياء الجديدة: models.ForeignKey
. يجب أن تكون Copy
من Book
واحد ، ولكن يمكن أن تحتوي المكتبة على Copy
متعددة من كل Book
. يمكن أن يوجد Book
في قاعدة البيانات دون أن تحتوي المكتبة على Copy
في الكتالوج الخاص بها ، ولكن لا يمكن أن توجد Copy
بدون Book
الأساسي.
يتم التعبير عن هذه العلاقة المعقدة بالسطر التالي:
book = models.ForeignKey(Book, on_delete=models.CASCADE)
سلوك الحذف هو نفسه سلوك Patron
في إشارة إلى User
.
العلاقة بين Copy
Patron
مختلفة قليلاً. قد يتم سحب Copy
إلى ما يصل إلى Patron
واحد ، ولكن يمكن لكل Patron
أن يقوم بسحب أكبر عدد ممكن من Copy
التي تسمح بها المكتبة. ومع ذلك ، هذه ليست علاقة دائمة ، في بعض الأحيان لا يتم سحب Copy
. Patron
Copy
بشكل مستقل عن بعضهم البعض في قاعدة البيانات ؛ لا ينبغي أن يؤدي حذف مثيل لأحدهما إلى حذف أي مثيل للآخر.
لا تزال هذه العلاقة حالة استخدام للمفتاح الخارجي ، ولكن بحجج مختلفة:
out_to = models.ForeignKey(Patron, blank=True, null=True, on_delete=models.SET_NULL)
هنا ، يسمح وجود blank=True
للنماذج بقبول None
كقيمة للعلاقة و null=True
يسمح Patron
علاقة المستفيد في جدول Copy
في قاعدة البيانات بقبول قيمة null
. سلوك الحذف ، الذي سيتم تشغيله على Copy
إذا تم Patron
مثيل المستفيد أثناء قيامهم بسحب تلك Copy
، هو قطع العلاقة مع ترك Copy
سليمة عن طريق تعيين حقل Patron
إلى لاغٍ.
يمكن لنوع الحقل نفسه ، models.ForeignKey
، التعبير عن علاقات مختلفة جدًا بين الكائنات. العلاقة الوحيدة التي لم أتمكن من ملاءمتها بشكل كامل في المثال هي حقل متعدد بأطراف ، والذي يشبه حقل واحد لواحد ، باستثناء أنه ، كما هو مقترح من خلال اسمه ، يمكن أن يرتبط كل مثيل بالعديد من الأمثلة الأخرى وكل من هؤلاء يمكن أن يرتبط بالعديد من المؤلفين الآخرين ، مثل كيف يمكن أن يكون للكتاب عدة مؤلفين ، كل منهم كتب عدة كتب.
الهجرات
قد تتساءل كيف تعرف قاعدة البيانات ما يتم التعبير عنه في النموذج. من واقع خبرتي ، الهجرات هي واحدة من تلك الأشياء التي تكون واضحة جدًا حتى لا تكون كذلك ، ثم تأكل وجهك. إليك كيفية الحفاظ على الكوب الخاص بك سليمًا ، للمبتدئين: تعرف على عمليات الترحيل وكيفية التفاعل معها ، ولكن حاول تجنب إجراء تعديلات يدوية على ملفات الترحيل. إذا كنت تعرف بالفعل ما تفعله ، فتخط هذا القسم وتابع ما يناسبك.
في كلتا الحالتين ، تحقق من الوثائق الرسمية للحصول على معالجة كاملة للموضوع.
تقوم عمليات الترحيل بترجمة التغييرات في نموذج إلى تغييرات في مخطط قاعدة البيانات. لست مضطرًا إلى كتابتها بنفسك ، فسيقوم Django بإنشائها باستخدام الأمر python manage.py makemigrations
. يجب تشغيل هذا الأمر عند إنشاء نموذج جديد أو تحرير حقول نموذج موجود ، ولكن ليست هناك حاجة للقيام بذلك عند إنشاء طرق النموذج أو تحريرها. من المهم ملاحظة أن عمليات الترحيل موجودة كسلسلة ، كل واحدة تشير إلى السابقة حتى تتمكن من إجراء تعديلات خالية من الأخطاء على مخطط قاعدة البيانات. وبالتالي ، إذا كنت تتعاون في مشروع ، فمن المهم الاحتفاظ بسجل ترحيل واحد متسق في التحكم في الإصدار. في حالة وجود عمليات ترحيل غير مطبقة ، قم بتشغيل python manage.py migrate
لتطبيقها قبل تشغيل الخادم.
يتم توزيع مشروع المثال مع ترحيل واحد ، سجلات / تهجيرات / 0001_initial.py . مرة أخرى ، يتم إنشاء هذا الرمز تلقائيًا ولا يجب عليك تعديله ، لذلك لن أقوم بنسخه هنا ، ولكن إذا كنت تريد التعرف على ما يحدث وراء الكواليس ، فابدأ وألق نظرة عليه.
تركيبات
على عكس الهجرات ، فإن التركيبات ليست جانبًا شائعًا في تطوير Django. أستخدمها لتوزيع عينة من البيانات مع المقالات ، ولم أستخدمها بأي طريقة أخرى. ومع ذلك ، لأننا استخدمنا واحدًا سابقًا ، أشعر أنني مضطر لتقديم الموضوع.
لمرة واحدة ، الوثائق الرسمية ضئيلة بعض الشيء حول هذا الموضوع. بشكل عام ، ما يجب أن تعرفه هو أن التركيبات هي وسيلة لاستيراد وتصدير البيانات من قاعدة البيانات الخاصة بك في مجموعة متنوعة من التنسيقات ، بما في ذلك JSON ، وهو ما أستخدمه. توجد هذه الميزة في الغالب للمساعدة في أشياء مثل الاختبار الآلي ، وهي ليست نظام نسخ احتياطي أو طريقة لتحرير البيانات في قاعدة بيانات حية. علاوة على ذلك ، لا يتم تحديث التركيبات مع عمليات الترحيل ، وإذا حاولت تطبيق تركيبات على قاعدة بيانات ذات مخطط غير متوافق ، فسوف تفشل.
لإنشاء أداة تثبيت لقاعدة البيانات بأكملها ، قم بتشغيل:
python manage.py dumpdata --format json > fixture.json
لتحميل أداة ، قم بتشغيل:
python manage.py loaddata fixture.json
خاتمة
كتابة النماذج في Django موضوع ضخم واستخدام لوحة الإدارة شيء آخر. في 3000 كلمة ، تمكنت فقط من تقديم كل منها. نأمل أن يمنحك استخدام لوحة الإدارة واجهة أفضل لاستكشاف كيفية عمل النماذج وربطها ببعضها البعض ، مما يمنحك الثقة لتجربة التمثيلات العلائقية الخاصة بالبيانات وتطويرها.
إذا كنت تبحث عن مكان سهل للبدء ، فحاول إضافة نموذج Librarian
الذي يرث من User
كما يفعل Profile
. لمزيد من التحدي ، حاول تنفيذ سجل الخروج لكل Copy
و / أو Patron
(هناك عدة طرق لإنجاز هذا).
أضواء جانغو هي سلسلة تقدم مفاهيم مهمة لتطوير الويب في Django. كُتبت كل مقالة كدليل مستقل لأحد جوانب تطوير Django الذي يهدف إلى مساعدة مطوري الواجهة الأمامية والمصممين على الوصول إلى فهم أعمق لـ "النصف الآخر" من قاعدة الكود. تم إنشاء هذه المقالات في الغالب لمساعدتك على فهم النظرية والاتفاقية ، ولكنها تحتوي على بعض نماذج التعليمات البرمجية المكتوبة في Django 3.0.
قراءة متعمقة
قد تكون مهتمًا بالمقالات والوثائق التالية.
- يسلط الضوء على Django: نماذج المستخدم والمصادقة (الجزء الأول)
- يسلط الضوء على Django: قوالب حفظ الخطوط (الجزء الثاني)
- أهم أحداث Django: الأصول الثابتة وملفات الوسائط (الجزء الرابع)
- وثائق إدارة Django
- موديلات جانغو
- مرجع حقل نموذج Django
- هجرات جانغو