(4) ورشة تطوير تطبيقات الويب باستخدام Django: مشاركة حلول بناء ال models


#1

أهلًا بالجميع

  • فهرس المواضيع السابقة

فهرس موضوعات ورشة تطوير تطبيقات الويب باستخدام Django

  • المهمة المطلوبة

(3) ورشة تطوير تطبيقات الويب باستخدام Django: بناء ال models

يتم تسليم الحلول عبر رابط المشروع على GitHub، بالتوفيق للجميع


#2

لم اقم بعمل migraion هناك خطا لم اعرفه .لكن اضافة الcategory تم .


#3

#4

لتجنب الاخطاء قم بكتابة النموذجين Category و Product اولا , ثم نفذ اوامر الترحيل :

python manage.py makemigration shop

python manage.py makemigration

python manage.py migrate


#5

سعيد برؤيتك مرة أخرى سيف @saifeddin1

ملاحظات في ما يخص العمل

أولا :
Meta class يجب أن تكون داخل ال model وليس وحدها فهي لوحة تحكم خاصة بال model

ثانيا :
الأمر الدي أحدث لك مشكلة المرة الثانية هو ال foreign key فأنت تشير فيه الى Category قبل تعريفها
لتفادي دلك يمكنك استعمال “Category” هكدا

category = models.ForeignKey("Category", related_name="products", on_delete=models.CASCADE)

أيضا ما رأيك في اضافة .gitignore لتجاهل ملفات .pyc

بالتوفيق سيف :+1:


#6

عمل ممتاز ابراهيم … بالتوفيق :+1: @ibrahim_badwi


#7

#8

جميل أخي @0xThamer
ملاحظة فيما يخص Meta class … يجب أن تكون داخل ال model وليس وحدها فهي لوحة تحكم خاصة بال model

بالتوفيق و سعيد برؤيتك مرة أخرى


#9

شكرا اخي هاشم
على التوضيح وانا ايضا سعيد برؤيتك مرة أخرى


#10

السلام عليكم
هذه محاولتي :grin:


ملاحظة:
أثناء عملى قمت بعمل model الـــ Product ثم عملت makemigrations + migrate
ثم بعد ذلك قمت بإضافة model الـــ Category و هذا يعني أنني غيرت في model الـــ Product بإضافة هذا السطر

    category = models.ForeignKey("Category", related_name='products', on_delete=models.CASCADE)

فحدث معي هذا الخطأ:

You are trying to add a non-nullable field 'Category' to wine without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:
 1) Provide a one-off default now (will be set on all existing rows with a null value for this column)
 2) Quit, and let me add a default in models.py
Select an option:

ولحل المشكل يوجد العديد من الحلول :
1- جعل الخاصية null = True وهذا ما لا أريده في هذه الحالة
أو
2- إضافة الخاصية default=“Other” مثلا، لم أستعمله لأنني لا أملك أي بيانات في قاعدة البيانات أخاف خسارتها
أو
3- الحل الذي قمت به ألا وهو حذف قاعدة البيانات ومحتوى الملف shop/migrations و إعادة الـقيام بالــ makemigrations و migrate من جديد

أتمنى نشر الأخطاء التي نقع فيها لنفيد يعضنا البعض

شكرا


#11

عندما اقوم بذلك لل Category يخرجلي اختيار احد خيارين 1 او 2 عند عمل migration … .
لذلك ظننت ان هناك خطا و لم اختر اي واحد


#12

@saifeddin1 @TChiOfficiel

بما أننا لا نملك أي بيانات نخاف فقدانها … اختر واحد أي Provide a one-off default now ثم أدخل أي قيمة لأنه لا شيئ سيتغير … لكن في حالة وجود بيانات يجب أن تختار القيمة المناسبة


#14

لقد قمت بالخطوات لكن بصراحة لازلت غير مقتنع بما حدث صراحة :smile:


#15

ما هو الشئ الذي لم تقتنع بيه اخي سيف ؟


#16

@TChiOfficiel انا عملت مثلك … مسحت مجلد
migration
من
shop
و بعد ما اضفت الكلاس الجديد عملت
makemigrations
قالي
Nothing changed
على ما اظن .ثم عملت
migrate
فظهرر مجلد
migration
من جديد …
لماذا ظهر
nothing changed ?


#17

shop/models solution

أرجو قبول مشاركتي و بانتظار التقييم


#18

شكرا أستاذي @hichem2h على الشرح الجميل والمبسط!


في انتظار التقييم :slightly_smiling_face:


#19

ولكن أخي @saifeddin1 حسب ما قرأت في الــ Doc ، فإن makemigrations هي التي تقوم بإنشاء الـMigrations بما فيها مجلد Migrations، أما migrate فتقوم بتطبيق محتوى الملف : مثلا 0001_initial.py على قاعدة البيانات.

بالنسبة لــ Nothing changed ربما لم تكن قد وضعت ‘shop’ داخل الملف settings.py أو أن الـmakemigrations قد نفذته بدون أي تغيير


#20

السلام عليكم , اعتقد اني نفذت المطلوب ولكن يوجد warning ظهرت عند تنفيذ اوامر ال migration ارجو توضيح معناها


#21

في الملف Coretabs-Django/coretabs/urls.py

urlpatterns = [
    path('', views.index),
    path('hello/<str:name>/', views.hello),
    path('admin/', admin.site.urls),
    url(r'^admin/', admin.site.urls), # this line initially existed !!!
]

أحذف:

path('admin/', admin.site.urls),

ﻷنه معرف مرتين

وهو المقصود بــ:
)
URL namespace ‘admin’ isn’t unique.