English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

دليل بسرعة للدخول إلى Django - نماذج قاعدة البيانات

دليل بسرعة للدخول إلى Django - درس تفصيلي حول نماذج قاعدة البيانات

انهت هذه السلسلة من الدروس الجزء الأول. بناءً على ما تم مناقشته في الدرس السابق، سنقوم في هذا الدرس بإنشاء قاعدة البيانات، إنشاء النموذج الأول، واستخدام موقع إدارة Django الذي يتم إنشاؤه بشكل سريع بواسطة Django.

إعداد قاعدة البيانات

الآن، افتح ملف mysite/settings.py. يُستخدم موديل Django لإعداد المتغيرات المستوى العالي مثل أي موديل Python عادي.

بالتشغيل الافتراضي، يتم استخدام SQLite للإعداد. إذا كنت مبتدئًا في قواعد البيانات أو ترغب في تجربة تعلم Django، فهذا الخيار الأبسط. SQLite مدمج في Python، لذا لا تحتاج إلى تثبيت أي شيء لدعم قاعدة بياناتك. عند بدء مشروعك الأولي، قد تحتاج إلى استخدام قاعدة بيانات أكثر قوة مثل PostgreSQL، MySQL وما إلى ذلك، يمكنك فقط تكوين تغيير قاعدة البيانات.

إذا كنت ترغب في استخدام قاعدة بيانات أخرى، فأنت بحاجة إلى تثبيت الاتصال المخصص لها، وتغيير القيم التالية في إعدادات 'الافتراضي' في قاعدة البيانات لتناسب إعدادات اتصالك بالقاعدة البيانات:

ENGINE – إدخال 'django.db.backends.sqlite3', 'django.db.backends.postgresql', 'django.db.backends.mysql' أو 'django.db.backends.oracle' NAME – اسم قاعدة البيانات. إذا كنت تستخدم SQLite، سيتم إنشاء قاعدة البيانات ملفًا على جهازك;في هذه الحالة، يجب أن يكون الاسم مسارًا مطلقًا كاملاً للملف، بما في ذلك اسم الملف. القيمة الافتراضية هي os.path.join(BASE_DIR,“db.sqlite3”)، سيتم تخزين الملف في مجلد مشروعك.

إذا لم تستخدم SQLite كقاعدة بيانات، وستستخدم إعدادات أخرى، مثل USER، PASSWORD، وHOST، يجب إضافتها. للحصول على مزيد من التفاصيل، راجع المستندات المستخدمة مستندات مرجع قاعدة البيانات

عندما تقوم بتعديل mysite/settings.py، إعدادات الوقت المنطقة TIME_ZONE.

إضافة إلى ذلك، لاحظ إعدادات INSTALLED_APPS في أعلى ملف هذا. إنها تحتوي على أسماء جميع التطبيقات المفعلة من Django في هذا مثال Django. يمكن استخدام التطبيقات في مشاريع متعددة، ويمكنك ضمها ووزعها في مشاريع الآخرين.

بشكل افتراضي، يحتوي INSTALLED_APPS على التطبيقات التالية التي تستخدم Django:

django.contrib.admin – إدارة الموقع، سيتم استخدامها قريبًا django.contrib.auth – نظام التحقق من الهوية django.contrib.contenttypes – إطار، أنواع المحتويات django.contrib.sessions – إطار الجلسات django.contrib.messages – إطار نقل الرسائل django.contrib.staticfiles – إطار لادارة الملفات الثابتة

تتضمن هذه التطبيقات التالية افتراضيًا، كحالة نموذجية مناسبة.

بعض من هذه التطبيقات تستخدم至少 جدولًا واحدًا في قاعدة البيانات، لذا نحتاج إلى إنشاء الجداول في قاعدة البيانات قبل استخدامها. لفعل ذلك، قم بتشغيل الأمر التالي:

# اسم الملف  : example.py
# حقوق النشر  : 2020  بواسطة  w3codebox
# مؤلف  : ar.oldtoolbag.com
# تاريخ  : 2020-08-08
C:\Python27\mysite>python manage.py migrate
 عمليات يجب تنفيذها:
   تطبيق جميع التهيئة: admin, contenttypes, auth, sessions
 تشغيل التهيئة:
   تصيير حالة النموذج... منتهي
   تطبيق contenttypes.0001_initial... حسنًا
   تطبيق auth.0001_initial... حسنًا
   تطبيق admin.0001_initial... حسنًا
   تطبيق admin.0002_logentry_remove_auto_add... حسنًا
   تطبيق contenttypes.0002_remove_content_type_name... حسنًا
   تطبيق auth.0002_alter_permission_name_max_length... حسنًا
   تطبيق auth.0003_alter_user_email_max_length... حسنًا
   تطبيق auth.0004_alter_user_username_opts... حسنًا
   تطبيق auth.0005_alter_user_last_login_null... حسنًا
   تطبيق auth.0006_require_contenttypes_0002... حسنًا
   تطبيق auth.0007_alter_validators_add_error_messages... حسنًا
   تطبيق sessions.0001_initial... حسنًا
 C:\Python27\mysite>

يهدف الأمر على الأمر المهاجر إلى إعداد INSTALLED_APPS ويقوم بإنشاء قاعدة البيانات بناءً على إعدادات قاعدة البيانات الخاصة بك في ملف mysite/settings.py، ويمكنه نقل أي جدول قاعدة البيانات للنموذج التطبيق (سنناقش ذلك في دروس لاحقة). سترى رسائل التطبيق المناسب لكل جدول. إذا كنت مهتمًا، يمكنك تشغيل الأمر في عميل قاعدة البيانات الخاص بك، مثل \dt (PostgreSQL)، SHOW TABLES; (MySQL)، .schema (SQLite)، أو SELECT TABLE_NAME FROM USER_TABLES; (Oracle) لعرض الجداول التي أنشأها Django.

إنشاء النموذج

الآن، سنحدد النموذج - الذي يصنع بشكل أساسي تصميم قاعدة البيانات، باستخدام بيانات إضافية.

في تطبيق استبياننا البسيط، سنقوم بإنشاء نموذجين: Question وChoice. نموذج Question يحتوي على عنوان السؤال وتاريخ الإصدار. نموذج Choice يحتوي على مجالين: نص الخيار وعدد الأصوات. كل خيار مرتبط بسؤال.

هذه المفاهيم تمثلها كلاسات بسيطة من بايثون. قم بتعديل ملف polls/models.py، حتى  يبدو ملف polls/models.py كالتالي:}


 # اسم الملف  : example.py
# حقوق النشر  : 2020  بواسطة  w3codebox
# مؤلف  : ar.oldtoolbag.com
# تاريخ  : 2020-08-08
من	django.db	استيراد	models
 class Question(models.Model):
     question_text = models.CharField(max_length=200)
     pub_date = models.DateTimeField('date published')
 فئة	Choice	(models.Model):
     question = models.ForeignKey(Question, on_delete=models.CASCADE)
     choice_text = models.CharField(max_length=200)
     votes = models.IntegerField(default=0)

هذا الكود مباشر. كل نموذج هو فرع من فئة django.db.models.Model. كل نموذج يحتوي على العديد من المتغيرات الفئوية، كل منها مرتبط بمجال في جدول قاعدة البيانات.

يتم تمثيل كل حقل باستخدام مثيل Class Field – على سبيل المثال، CharField يمثل حقل نصي، DateTimeField يمثل حقل تاريخ和时间. هذا يخبر django نوع البيانات الذي يتم حفظه في كل حقل.

اسم كل مثيل Field (مثل question_text أو pub_date) هو اسم الحقل، وهو تنسيق صديق للآلة. عند استخدامه في كود Python، ستعمل قاعدة البيانات باستخدام هذا الاسم كاسم عمود.

يمكن أن تكون هناك معلمات اختيارية مختلفة للحقول؛ في هذا المثال، قمنا بتعيين قيمة افتراضية للإصوات إلى 0.

في النهاية، يجب الانتباه إلى تعريف العلاقات، حيث تم استخدام المفتاح الأجنبي هنا. هذا يخبر django بأن كل خيار مرتبط بسؤال. يدعم django جميع العلاقات البسيطة الشائعة: عدة إلى واحد، عدة إلى عدة، وواحد إلى واحد.

تفعيل النموذج

كود النموذج صغير، لكنه يمثل الكثير من معلومات Django. معه يمكن لدjango القيام بما يلي:

إنشاء قاعدة بيانات لهذا التطبيق (استخدام جملة CREATE TABLE)

إنشاء واجهة API للوصول إلى كائنات Question و Choice في قاعدة البيانات Python

لكن أولاً، يجب علينا إخبار polls بأن التطبيق الذي تم تثبيته.

الآن، قم بتعديل ملف mysite/settings.py مرة أخرى وتغيير إعداد INSTALLED_APPS لتشمل النص “polls.apps.PollsConfig”. النتيجة ستكون كالتالي:

mysite/settings.py ملف المحتويات كالتالي:

# اسم الملف  : example.py
# حقوق النشر  : 2020  بواسطة  w3codebox
# مؤلف  : ar.oldtoolbag.com
# تاريخ  : 2020-08-08
INSTALLED_APPS = [
    polls.apps.PollsConfig
    django.contrib.admin
    django.contrib.auth
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]
现在Django知道 polls 投票程序。让我们运行另一个命令:
# اسم الملف  : example.py
# حقوق النشر  : 2020  بواسطة  w3codebox
# مؤلف  : ar.oldtoolbag.com
# تاريخ  : 2020-08-08
C:\Python27\mysite>python manage.py makemigrations polls
 Migrations for 'polls':
   0001_initial.py:
     - Create model Choice
     - Create model Question
     - Add field question to choice
 C:\Python27\mysite>

通过运行makemigrations,告诉Django你已经做了模型一些改动(在这种情况下,已经是最新的了),并且你想更改存储作为一个移植。

迁移是Django怎么存储您更改的模型(由你的数据库架构决定)- 它们只是在磁盘上的文件。您如果喜欢可以读取移植新的模型,它在文件 polls/migrations/0001_initial.py。你不会希望Django每一次都读取它们,不过将它们设计成人可编辑的,你要知道Django是如何变化的并手动调整。

还有将运行migrations,自动管理数据库模式(表)命令 - 这就是所谓的迁移,让我们看看SQL了解移植运行。 sqlmigrate 命令将移植名称返回SQL显示:


 # اسم الملف  : example.py
# حقوق النشر  : 2020  بواسطة  w3codebox
# مؤلف  : ar.oldtoolbag.com
# تاريخ  : 2020-08-08
$ python manage.py sqlmigrate polls 0001

应该看到类似下面的东西(我们已经重新格式化它的可读性):

# اسم الملف  : example.py
# حقوق النشر  : 2020  بواسطة  w3codebox
# مؤلف  : ar.oldtoolbag.com
# تاريخ  : 2020-08-08
C:\Python27\mysite>python manage.py sqlmigrate polls 0001
 BEGIN;
 --
 -- Create model Choice
 --
 CREATE TABLE "polls_choice" ("id" integer not NULL PRIMARY KEY AUTOINCREMENT, "c
 choice_text" varchar(200) not NULL, "votes" integer not NULL);
 --
 -- Create model Question
 --
 CREATE TABLE "polls_question" ("id" integer not NULL PRIMARY KEY AUTOINCREMENT,
 "question_text" varchar(200) not NULL, "pub_date" datetime not NULL)
 --
 -- إضافة حقل question إلى choice
 --
 ALTER TABLE "polls_choice" RENAME TO "polls_choice__old";
 CREATE TABLE "polls_choice" ("id" integer not NULL PRIMARY KEY AUTOINCREMENT, "c
 "choice_text" varchar(200) not NULL, "votes" integer not NULL, "question_id" integer
 er not NULL REFERENCES "polls_question" ("id"));
 INSERT INTO "polls_choice" ("choice_text", "votes", "id", "question_id") SELECT
 "choice_text", "votes", "id", NULL from "polls_choice__old";
 DROP TABLE "polls_choice__old";
 CREATE INDEX "polls_choice_7aa0f6ee" ON "polls_choice" ("question_id");
 COMMIT;
 C:\Python27\mysite>

أوامر الت迁移 تشغل جميع الت迁移 التي لم تتم تطبيقها بعد (Django تتبع ما إذا كانت الت迁移 قد تم تطبيقها باستخدام جدول خاص في قاعدة البيانات يُدعى django_migrations) تشغيلها في قاعدة البيانات - بشكل أساسي، يتم سينخرة التغييرات في بنية قاعدة البيانات باستخدام نماذج.

استخدام API

الآن، دعونا ندخل بيئة التشغيل التفاعلية لـ Python وواجهة برمجة التطبيقات التي يقدمها Django. لتشغيل أوامر سطر الأوامر، استخدم الأمر التالي:

# اسم الملف  : example.py
# حقوق النشر  : 2020  بواسطة  w3codebox
# مؤلف  : ar.oldtoolbag.com
# تاريخ  : 2020-08-08
C:\Python27\mysite>python manage.py shell
 Python 2.7.10 (default, May 23 2015, 09:44:00) [MSC v.1500 64 bit (AMD64)] on wi
 n32
 اكتب "help"، "copyright"، "credits" أو "license" للحصول على مزيد من المعلومات.
 (InteractiveConsole)
 >>>

يمكنك فقط إدخال "python" بدلاً من ذلك، لأن manage.py يضبط متغير بيئي DJANGO_SETTINGS_MODULE، مما يمنح Django مسارًا إلى ملف mysite/settings.py.

# اسم الملف  : example.py
# حقوق النشر  : 2020  بواسطة  w3codebox
# مؤلف  : ar.oldtoolbag.com
# تاريخ  : 2020-08-08
>>> import django
 >>> django.setup()
# اسم الملف  : example.py
# حقوق النشر  : 2020  بواسطة  w3codebox
# مؤلف  : ar.oldtoolbag.com
# تاريخ  : 2020-08-08
>>> from polls.models import Question, Choice # استورد الفئات النموذجية التي كتبناها للتو.
 # لا توجد أسئلة في النظام بعد.
 >>> Question.objects.all()
 []
 # أنشئ سؤالًا جديدًا.
 # تم تمكين دعم مناطق الوقت في ملف الإعدادات الافتراضي، لذا
 # يتوقع Django وقتًا مع معرف المنطقة الزمنية للpub_date. استخدم timezone.now()
 # بدلاً من datetime.datetime.now() وسيفعل الشيء الصحيح.
 >>> from django.utils import timezone
 >>> q = Question(question_text="ما الجديد؟", pub_date=timezone.now())
 # احفظ العنصر في قاعدة البيانات. يجب عليك طلب الإجراء save() صراحةً.
 >>> 	q.save()
 # الآن لديه معرف. لاحظ أن هذا قد يقول "1L" بدلاً من "1"، اعتمادًا على
 # على قاعدة البيانات التي تستخدمها. هذا ليس شيئًا كبيرًا؛ إنه يعني فقط
 # البياناتية الخلفية ترغب في إرجاع الأعداد الصحيحة كعدد طويل في بايثون
 # 	objects.
 >>> 	q.id
 1
 # 	وصول إلى قيم حقل النموذج عبر خصائص بايثون.
 >>> 	q.question_text
 "What's 	new?"
 >>> 	q.pub_date
 datetime.datetime(2012, 	2, 	26, 	13, 	0, 	0, 	775217, 	tzinfo=<UTC>)
 # 	تغيير القيم عن طريق تغيير الصفات، ثم التشغيل.
 >>> 	q.question_text 	= 	"What's 	up?"
 >>> 	q.save()
 # 	objects.all() 	يعرض جميع الأسئلة في قاعدة البيانات.
 >>> Question.objects.all()
 [<Question: 	Question 	object>]

هناك حاجة إلى الانتظار لفترة. <Question: Question object> هذا تمثيل غير مفيد لهذا الكائن. دعونا نحل هذه المشكلة: من خلال تعديل نموذج Question (في ملف polls/models.py)، وإضافة طريقة __str__() إلى نماذج Question و Choice

محتويات ملف polls/models.py كالتالي:
 # اسم الملف  : example.py
# حقوق النشر  : 2020  بواسطة  w3codebox
# مؤلف  : ar.oldtoolbag.com
# تاريخ  : 2020-08-08
من	django.db	استيراد	models
 من	django.utils.encoding	استيراد	python_2_unicode_compatible
 @python_2_unicode_compatible	# فقط إذا كنت بحاجة إلى دعم بايثون 2
 class Question(models.Model):
     # ...
     تعريف	__str__(self):
         عدد	self.question_text
 @python_2_unicode_compatible	# فقط إذا كنت بحاجة إلى دعم بايثون 2
 فئة	Choice	(models.Model):
     # ...
     تعريف	__str__(self):
         عدد	self.choice_text

إضافة __str__() مهمة جدًا، استخدام التشغيل التفاعلي لمعالجة إضافته إلى النموذج، ليس فقط لصحتك، بل أيضًا لأن تمثيل الكائنات يستخدم في Django لإنشاء إدارة تلقائية.

الاحتياط، هذه هي طرق بايثون الطبيعية. دعونا نضيف طريقة مخصصة، هنا فقط للاستعراض: polls/models.py

 # اسم الملف  : example.py
# حقوق النشر  : 2020  بواسطة  w3codebox
# مؤلف  : ar.oldtoolbag.com
# تاريخ  : 2020-08-08
استيراد	datetime
 من	django.db	استيراد	models
 from django.utils import timezone
 class Question(models.Model):
     # ...
     def was_published_recently(self):
         return self.pub_date >= timezone.now() - datetime.timedelta(days=1)

لاحظ هنا إضافة import datetime وfrom django.utils import timezone، لاستدعاء مكتبة datetime القياسية لـ Python وملفات الاستخدامات المتعلقة بالتوقيتات في django.utils.timezone، إذا لم تكن مطلعًا على معالجة التوقيتات في Python، يمكنك قراءة  مستندات دعم التوقيتات

حفظ هذه التغييرات، ثم أعد تشغيل python manage.py shell لبدء Python shell جديد:

 # اسم الملف  : example.py
# حقوق النشر  : 2020  بواسطة  w3codebox
# مؤلف  : ar.oldtoolbag.com
# تاريخ  : 2020-08-08
>>> from polls.models import Question, Choice
 # تأكد من أن إضافة __str__() نجحت.
 >>> Question.objects.all()
 [<Question: ما الذي يحدث؟>]
 # يقدم Django واجهة استعلام قاعدة البيانات غنية تمامًا وتعمل بالكامل بواسطة
 # معلمات الكلمات المفتاحية.
 >>> Question.objects.filter(id=1)
 [<Question: ما الذي يحدث؟>]
 >>> Question.objects.filter(question_text__startswith='What')
 [<Question: ما الذي يحدث؟>]
 # الحصول على السؤال الذي تم نشره هذا العام.
 >>> from django.utils import timezone
 >>> current_year = timezone.now().year
 >>> Question.objects.get(pub_date__year=current_year)
 <Question: ما الذي يجري؟>
 # طلب معرف غير موجود، هذا سيؤدي إلى رفع استثناء.
 >>> Question.objects.get(id=2)
 Traceback (أحدث استدعاء أحدث):
     ...
 DoesNotExist: لا يوجد سؤال يتطابق مع الاستعلام.
 # البحث عن المفتاح الرئيسي هو الحالة الأكثر شيوعاً، لذا يقدم Django
 # اختصار للبحث الدقيق باستخدام المفتاح الرئيسي.
 # التالي هو نفسه مثل Question.objects.get(id=1).
 >>> Question.objects.get(pk=1)
 <Question: ما الذي يجري؟>
 # تأكد من أن طريقتنا المخصصة عملت.
 >>> q = Question.objects.get(pk=1)
 >>> q.was_published_recently()
 True
 # اعط Sؤال بعض الخيارات. مكالمة create تشيد بجسم جديد
 # الجسم Choice، يقوم بجملة INSERT، يضيف الخيار إلى المجموعة
 # عدد الخيارات المتاحة وتعيد الجسم الجديد Choice. Django يخلق
 # مجموعة تحتوي على 'الجانب الآخر' لعلاقة Foreign Key
 # (مثلاً خيار سؤال) يمكن الوصول إليه عبر واجهة البرمجة التطبيقية (API).
 >>> q = Question.objects.get(pk=1)
 # عرض أي خيارات من مجموعة الأجوبة المرتبطة -- لا شيء حتى الآن.
 >>> q.choice_set.all()
 []
 # إنشاء ثلاثة خيارات.
 >>> q.choice_set.create(choice_text='ليس هناك الكثير', votes=0)
 <Choice: لا شيء>
 >>> q.choice_set.create(choice_text='The sky', votes=0)
 <Choice: السماء>
 >>> c = q.choice_set.create(choice_text='Just hacking again', votes=0)
 # يمكن للجسم Choice الوصول إلى جسم السؤال المرتبط به.
 >>> c.question
 <Question: ما الذي يجري؟>
 # والعكس صحيح: يتمكن جسم السؤال من الوصول إلى جسم الخيار.
 >>> q.choice_set.all()
 [<Choice: لا شيء>, <Choice: السماء>, <Choice: Just hacking again>]
 >>> q.choice_set.count()
 3
 # يتبع API العلاقات تلقائيًا إلى أي مدى تحتاج.
 # استخدم تحت التحتية للتمييز بين العلاقات.
 # يعمل هذا إلى أي مستوى عمق تريده؛ لا يوجد حد.
 # ابحث عن جميع الخيارات لكل سؤال whose pub_date في هذا العام
 # (استخدام المتغير 'current_year' الذي أنشأناه أعلاه).
 >>> Choice.objects.filter(question__pub_date__year=current_year)
 [<Choice: لا شيء>, <Choice: السماء>, <Choice: Just hacking again>]
 # حذف أحد الخيارات. استخدم delete() لذلك.
 >>> c = q.choice_set.filter(choice_text__startswith='Just hacking')
 >>> c.delete()

تعريف إدارة Django

إنشاء مستخدم إداري

أولاً، نحتاج إلى إنشاء مستخدم يمكنه الدخول إلى واجهة الإدارة. أعدادات الأمر التالية:

 # اسم الملف  : example.py
# حقوق النشر  : 2020  بواسطة  w3codebox
# مؤلف  : ar.oldtoolbag.com
# تاريخ  : 2020-08-08c:\python27\mysite> python manage.py createsuperuser

ادخل الاسم المستخدم الذي تريده (يمكنك استخدام أي اسم)، ثم اضغط على Enter.

 # اسم الملف  : example.py
# حقوق النشر  : 2020  بواسطة  w3codebox
# مؤلف  : ar.oldtoolbag.com
# تاريخ  : 2020-08-08
اسم المستخدم: admin

ثم، سيتم عرض استفسار لإدخال عنوان البريد الإلكتروني (يمكنك استخدام أي عنوان):

 # اسم الملف  : example.py
# حقوق النشر  : 2020  بواسطة  w3codebox
# مؤلف  : ar.oldtoolbag.com
# تاريخ  : 2020-08-08
عنوان البريد الإلكتروني: [email protected]

الخطوة الأخيرة هي إدخال كلمة المرور. سيطلب منك إدخال كلمة المرور مرتين، المرة الثانية للتحقق من الأولى.

 # اسم الملف  : example.py
# حقوق النشر  : 2020  بواسطة  w3codebox
# مؤلف  : ar.oldtoolbag.com
# تاريخ  : 2020-08-08
كلمة المرور: **********
 كلمة المرور (مرة أخرى): *********
 تم إنشاء المستخدم الإداري بنجاح.

تشغيل خادم التطوير

موقع إدارة Django مفعّل افتراضياً. دعنا نبدأ بخادم التطوير ونستكشفه.

إذا لم يكن الخادم يعمل، قم بتموينه كما يلي:

 # اسم الملف  : example.py
# حقوق النشر  : 2020  بواسطة  w3codebox
# مؤلف  : ar.oldtoolbag.com
# تاريخ  : 2020-08-08
c:\python27\mysite>python manage.py runserver

الآن، افتح متصفح الويب، انتقل إلى " /admin/ " اسم النطاق المحلي- على سبيل المثال،   http://127.0.0.1:8000/admin/  يجب أن ترى واجهة تسجيل الدخول للمسؤول:  

بسبب التفعيل الافتراضي لـ 'loginas'، قد يظهر شاشة الدخول بلغتك الخاصة، بسبب التفعيل الافتراضي للترجمة، قد يظهر شاشة الدخول بلغتك الخاصة،

ادخل موقع إدارة المسؤول

الآن، حاول الدخول إلى حساب المستخدم الإداري الذي أنشأته في الخطوة السابقة. يجب أن ترى صفحة بداية Django الإدارة:  

يجب أن ترى بعض المحتويات القابلة للتعديل: المجموعات والمستخدمين. إنها تقدم من قبل django.contrib.auth، إطار التحقق من Django.

تعديل برنامج الإدارة للاستطلاع

أين تطبيق الاستطلاع؟ لن يظهر في صفحة مؤشر الإدارة.

هناك شيء واحد لفعله: نحتاج أن نخبر المسؤول بأن Object هذا له واجهة إدارة. للقيام بذلك، افتح ملف polls/admin.py وعدلها كما يلي:  

 # اسم الملف  : example.py
# حقوق النشر  : 2020  بواسطة  w3codebox
# مؤلف  : ar.oldtoolbag.com
# تاريخ  : 2020-08-08
من   django.contrib   استيراد  admin
 من ملفات .models import Question
 admin.site.register(Question)

استكشاف وظائف الإدارة

الآن، لقد سجلنا Question، ويعلم Django أنه يجب عرضها في صفحة الرئيسية لإدارة:

انقر على "Questions". الآن، في صفحة "change list"، استعرض الأسئلة. تُظهر هذه الصفحة جميع الأسئلة في قاعدة البيانات وتسمح لك باختيار واحدة لتغييرها. بالإضافة إلى الأسئلة التي أنشأناها مسبقًا:

انقر على هذا السؤال "ما الجديد؟" للتحرير:

تم ذكر الأمور التي يجب الانتباه إليها هنا:

 

تُولد النماذج من النموذج (Question) تلقائيًا.

 

تناسب أنواع الحقول المختلفة (DateTimeField،CharField) أجزاء الدخول HTML المتبادلة. يعرف كل نوع حقل كيف يتم عرضه في إدارة Django.

يتم الحصول على مفتاحي سريعة JavaScript لكل حقل DateTimeField. يُمنح التاريخ مفتاحي سريعة "Today" ويفتح التقويم، ويتم الحصول على مفتاحي سريعة "Now" ويفتح نافذة تحتوي على وقت الدخول العادي.

تعديل "Date published" بالنقر على "Today" و "Now" مفتاحي السريعة. ثم اضغط على "Save and continue editing."، ثم اضغط على "History" في الزاوية العلوية اليمنى. سترى صفحة تحتوي على قائمة بالتغيرات التي تم إدارتها باستخدام Django لهذا العنصر، واسم المستخدم والختم الزمني للمعدل:   تحميل الشيفرة المصدرية:  http://pan.baidu.com/s/1jGR3wDg