التعامل مع قواعد البيانات- متقدم ( الدرس الاخير)

albaderمنذ 5 سنوات

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته

اليوم هو الدرس الاخير من اساسيات جانغو

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

كنت افكر في كتابة الدرس  يدوياً  لكن قررت ان اقوم بكتابة امثله من موقع كتب جانغو يشرح هذا المفهوم

 

انقله بطريقتي الخاصة  وسيكون الدرس هو الاخير وباذن الله سيشرح كامل مفاهيم قواعد البيانات والعلاقات بينها relationship

 

سنقوم بانشاء ثلاثة جداول  وسيكون بين الجداول علاقة  

كما تعلمنا سابقا ان اي تعامل مع قواعد البيانات سيكون بداخل ملف models.py

from django.db import models

class Publisher(models.Model):
    name = models.CharField(max_length=30)
    address = models.CharField(max_length=50)
    city = models.CharField(max_length=60)
    state_province = models.CharField(max_length=30)
    country = models.CharField(max_length=50)
    website = models.URLField()

    def __str__(self):
        return self.name

class Author(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=40)
    email = models.EmailField()

    def __str__(self):
        return '%s %s' % (self.first_name, self.last_name)

class Book(models.Model):
    title = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher)
    publication_date = models.DateField()

    def __str__(self):
        return self.title 

الجدول الاول Publisher  بيانات ناشر المحتوى او الكتاب

وبداخلة عدة حقول

name  اسم الشخص الناشر عباره عن character  حرف والحد الاعلى للحروف 30

address  عنوان الناش وهو نفس الحقل السابق حروف

city  المدينة

state_province الولاية او الحي

country  البلد

website   رابط الموقع للناشر

من ثم دالة str  وهي تعيد لنا قيمة للكلاس او الفئة دائما ماتعيد اسم الناشر

هذا الجدول الاول والحقول بداخله كما وضحناها سابقا وبامكانك اضافة حقول اخرى حسب ماتحتاج ولكن نكتفي بهذا القدر

-----------------------------------------------------------

الجدول الثاني author  عن مؤلف الكتاب  المؤلف يختلف عن الناشر طبعا لان الناشر هو ناقل الكتاب

وبداخله ثلاثة حقول فقط

الاسم الاول - الاسم الاخير - الايميل

,ودالة str  التي تعيد لنا الاسم الاول والاخير للكلاس

-----------------------------------------

الان واهم شيء لدينا جدول book

بداخله عدة حقول الحقل الاول

title عنوان الكتاب

authors  الحقل هذا عباره عن manytomany  كثير لكثير ( بمعنى المؤلف احتمال يكون له عدة كتب  - والكتاب يكون له عدة مؤلفين  ) مربوط مع جدول المؤلف

publisher الناشر ونوع الحقل foreignkey علاقة واحد لكثير وهو مفتاح اجنبي ومربوط مع جدول الناشر

-----------------------------------------------------------------------------------------------------------------

لو اردنا ان نحصل على كتاب معين او معلوماته

from mysite.books.models import Book
b = Book.objects.get(id=50)
b.title

الناتج

'The Django Book'

طلبنا الكتاب الذي يحمل الايدي رقم 50

طيب لو اردنا ان نحصل على حقل من المؤلف او الناشر بما انها حقول اجنبية ومربوطة مع هذا الجدول

 

سيكون كالتالي

b = Book.objects.get(id=50) # طلبنا الكتاب اللي يحمل الايدي رقم 50
b.publisher # هنا قمنا بتحديد الناشر لاتنسى ان لدينا كلاس بهذا الاسم ولكن نكتبة بحروف صغيره
<Publisher: Apress Publishing> # الناتج كما يظهر من دالة str 
b.publisher.website # حقل الموقع للناشر لو اردنا طلبه وهكذا مع بقية الحقول
'http://www.apress.com/'

 

اما لو اردنا ان نستخرج الكتب الخاصة بناشر معين

كالتالي

p = Publisher.objects.get(name='Apress Publishing')# حددنا اسم الناشر هنا
p.book_set.all()# هنا طلبنا جميع الكتب
[<Book: The Django Book>, <Book: Dive Into Python>, ...]

 

طبعا افتراضيا يكون اسم الجدول المربوط بعلاقة مثال الكتب book_set

ولو اردنا ان نقوم بتغييره نظيف معامل للحقل المربوط

related_name  ونعطيه اي قيمة

publisher = models.ForeignKey(Publisher, related_name='any')

سيصبح الطلب باسم any

 

 لو اردنا ان نقوم بعرض المؤولفين لكتاب معين

>>> b = Book.objects.get(id=50)
>>> b.authors.all()
[<Author: Adrian Holovaty>, <Author: Jacob Kaplan-Moss>]
>>> b.authors.filter(first_name='Adrian')
[<Author: Adrian Holovaty>]
>>> b.authors.filter(first_name='Adam')
[]

 

 

طبعا الدرس يطول جداً وهناك تخصيص المدراء للنماذج وامور اكثر تعقيداً

 

لكن اكتفي بهذا القدر طالما ان الدورة هي عن اساسيات جانغو ووجب ان اكتب مايخص العلاقات بين الجداول لفهمها ولو قليلا

 

 

جميع الاكواد هي من موقع كتب جانغو  (ذكرتها للامانه العلمية فقط)

 

الى هنا تنتهي دروتنا البسيطة جدا جدا

إن اصبت فهو من الله وإن اخطأت فمن نفسي والشيطان

 

وان شاء الله باأقرب فرصه ساطرح شرح فيديو لانشاء موقع متكامل عن ماتعلمناه بالاساسيات 

ومن ثم ننتقل الى جانغو متقدم ونشرح كل شي متقدم

 

 

التعليقات (1)

saied:

شرح مختصر وقمة في الجمال

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !