(5) ورشة تطوير تطبيقات الويب باستخدام Django: التعامل مع Django ORM


#21
    def save(self, *args, **kwargs):
    if not self.id:
        self.slug = slugify(self.name)

    super().save(*args, **kwargs)

id

تظهر باللون الأصفر اي انه لم يتم التعرف عليها ما المشكلة

#22

السلام عليكم
عند كتابة الأمر

>>> c1 = Category(name="Mobile Devices",slug="mobile-devices")

فإنه يتم إنشاء الــObject ولكن يحتوي فقط على name, slug

لو تكتب

c1.id

الــShell لن طبع أي شيء، أي أنه لا توجد قيمة للــ id

وعند إستدعاء الدالة save()

لو تكتب

c1.id

الـــ Shell سيطبع عدد لا يساوي 0

نعلم أنه ليس لدينا قيمة للــ id

إذا دجانغو همنا يعمل Insert

ولكن عندما نغير قيمة name مثلا فإن الدالة save() ستجد أن الــid => primary-key
فأن دجانغو هنا يعمل update للـــ Object و ليس Insert

أتمنى أن أكون قد وُفِّقت في الشرح
شكرا


#23

اعتقد أنه يوجد خطا كتابي بدل gte تم وضع gre


#24

عند انشاء الكائن يتم زيادة ال id تلقائيا اي
اول كائن تم انشائه يأخذ ال id = 1
ثاني كائن يأخذ ال id = 2
وهكذا


#25

ضع هذا الكود داخل ال model : Product, Category بهذا الشكل

class Product(models.Model):

   ...
   
    def save(self, *args, **kwargs):
        if not self.id:
        self.slug = slugify(self.name)

        super().save(*args, **kwargs)

#26

صحيح شكرا على التنبيه سأعدلها


#27

جزاكم الله خيرا @ahmedalrifai @TChiOfficiel
اعتقد ان مشكلتي كانت مع السطر

لقد فهمته بصورة خاطئة و هو ما ادي الي هذا الالتباس حيث ظننت انه يتحقق من ان ال id له قيمة اي يحقق True لينفذ دالة slugify
اشكركم مرة اخري


#28

اليس كذلك


#29

ما هذا :disappointed_relieved::disappointed_relieved:


#30

هل اضفت model category الى models.py? وقمت بعمل migration?


#31

لذلك قلت اني غير مقتنع
عندما اضفته و قمت ب migration ظهر nothing changed …
ولكن موجود يمكن تشوف ال repo


#32

هل قمت بعمل

python manage.py makemigrations shop

ثم

python manage.py migrate

#33

قمت بعمل python manage.py makemigrations


#34

قم بعمل

python manage.py migrate

#35

افتح قاعدة البيانات ببرنامج http://sqlitebrowser.org مثلا وتأكد من وجود الجدول shop_category او لا


#36

@ahmedalrifai



#37

@TChiOfficiel معك حق هي غير موجودة على قاعدة البيانات… لكن مالعمل
image


#38

جرب حذف محتوى ملف migrations
واعد المحاولة
Makemigrations
Migrate


#39

جربت اكثر من مرة… ولم يحدث شيئ


#40

تأكد من وجود ملف migrations بعد عمل:

python manage.py makemigrations shop

وبعدها اعمل migrate… إذا لم تعمل احذف ملف قاعدة البيانات وحاول مجدداً.