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


#22

ما الفرق بين الامرين

وما الذي سيحدث اذا تجاهلت هذا التحذير و في حالة حذف احد الامرين هل ساحتاج لاعادة عمل ال migration


#23

لا علاقة له بالــ migration على ما أعتقد، لن يؤثر عليها
أما بالنسبة للفرق بينهما أي path & url فتقوم بنفس الشيء ولكن الإختلاف في كيفية الكتابة ففي url نستعمل Regular Expression
مثال:

url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),

أما في path فنستعمل angle brackets
مثلا:

path('articles/<int:year>/', views.year_archive),

الــ view يستقبل keyword argument : year كــ Integer
وهي خاصية جديدة في دجانغو 2.0
أما url فهي الطريقة القديمة ويمكن أن تهمل في الاصدارات القادمة

المصادر:
https://docs.djangoproject.com/en/2.0/releases/2.0/#simplified-url-routing-syntax

https://docs.djangoproject.com/en/2.0/ref/urls/


#24

شكرا علي الشرح :slight_smile:


#25

العفو أخي :wink:


#26

@m_saadi @walidpiano

عمل ممتاز جدا … يمكنكما البدء مع الورشة القادمة


#27

شكرا يا أستاذي :slightly_smiling_face::slightly_smiling_face:


#28

#29

@saifeddin1 @ibrahim_badwi @0xThamer @TChiOfficiel @m_saadi @walidpiano @Ahmed-Shalaby @sohep

آسف … لكن نسيت أنه يجب اضافة description الى category كالتالي

description = models.TextField(blank=True, max_length=256)   

لقد أضفتها للدرس
بالتوفيق


#30

https://github.com/cheikhtourad/coretabs.git @TChiOfficiel @hichem2h @YaserAlnajjar


#31

جيد أخي @cheikhtourad
ولكن عليك بإضافة الدالة str لعرض الــ objects بطريقة جميلة و مفهومة


#32

ايضا يوجد خطأ نصي في ملف shop/models

عدل

class Meta:

بدلا من

class Mota:

قم بحذف قاعدة البياناتdb.sqlite3 وملف shop/migration/0001_initial.py
ونفذ الاوامر التالية لاعادة عمل migration للتغييرات الجديدة

python manage.py makemigrations
pyhton manage.py migrate shop


#33

أصدقائي هذه محاولة … متأخرة نوعاً ما :frowning:


#34

لا عليك يا أخي Majd-A المهم أنك وصلت بسلام
عمل جميل جدا
بالتوفيق


#35

اهلا بك اخ ماجد @Majd-A , هناك ملاحظة بسيطة :

  • نسيت اضافة Meta class للنماذج في الملف shop/models.py
  • بعد التعديل على الملف قم بكتابة اوامر ال migrations لتحفظ التعديلات التي قمت بها في القاعدة البيانات.

#36

حدثت مع نفس مشكلة التى حدثت مع الأخ @TChiOfficiel وقمت بحذف محتوى ملف migrations ثم عمل makemigrations مرة اخرى


#37

وجدت هذة الاداة فى جوجل كروم لمتابعة قاعدة البيانات

يمكنكم تجربتها اذا كانت مفيدة


#38

عمل جيد وأرجو تقبل ملاحظاتي

أولا: تعريف Product class قبل Catergory class سوف ينتج عنه خطأ أثناء تشغيل الخادم جرب تفيذ الأمر التالي

$ ./manage.py runserver

ولاحظ النتيحة

Category, related_name=“products”, on_delete=models.CASCADE)
NameError: name ‘Category’ is not defined

لأن Category عباره عن foreign key for Product و بالتالي وجودها قبل تعريفها بال Productسيكون سبب المشكلة حيث أن البايثون Interpreted language و قرأه الكود تكون من أول الملف لأسفل عن طريق python interpreter :blush:

ثانياً: بالنسبة للحقل created_at انت عملت extra work و ذلك عن طريق import timezone
كان كافي
created_at = models.DateTimeField(auto_now_add=True)
ولكن النتجة واحدة :wink:

مجهود جيد و الرجاء تقبل مروري :blush:


#39

سلام أخي محمد
و لكن أرى أنه قد كتب

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

أي أنه قد مرر الـــ “Category” كـــ String و في هذه الحالة لن يحدث خطأ


#40

مضبوط كلامك أخي فتحي

معذرة لم أنتبه أنه Category قد مرر على شكل string :blush:

@MRamadan

و لكن في حاله غير ذلك سيحدث خطأ من هنا استفدنا من معرفة الفرق بين الطريقتين
:fist_left::fist_right::handshake:

ForeignKey (Django Documentation)
If you need to create a relationship on a model that has not yet been defined, you can use the name of the model, rather than the model object itself


#41

شكراً لتعليقاتكم اصدقائى، فيها معلومات جديدة
@m_saadi @TChiOfficiel

اسف لتأخير الرد لظروف العمل سأنتقل الآن الى المهمه التاليه