دیتابیس Database و مدل Model در Django
دیتابیس Database و مدل Model در جنگو از درس قبل به خاطر دارید که آطلاعات دورهها به صورت ثابت داخل
از درس قبل به خاطر دارید که آطلاعات دورهها به صورت ثابت داخل کدهای HTML در صفحه اصلی نوشته شده بود. اما در پروژههای واقعی، اطلاعات را در یک پایگاه داده یا Database ذخیره میکنیم. بنابراین باید راهی برای خواندن اطلاعات از پایگاه داده ، داشته باشیم. در این درس قصد داریم همین کار را انجام دهیم. اما به دلیل اهمیت مطلب، ممکن است این موضوع کمی طولانی شده و در بیش از یک درس گنجانده شود.
Database یا پایگاه داده محلی برای ذخیره و مدیریت اطلاعات است. مثلاً سایت آزمون پلاس در آینده اطلاعات مختلفی خواهد داشت:
کاربران
دورهها
مدرسها
دستهبندیها
محصولات
سفارشها
پرداختها
آزمونها
سؤالات
پاسخهابرای مثال، اطلاعات یک دوره میتواند به این شکل باشد:
نام دوره: Python
توضیحات: آموزش Python از پایه تا پروژه
قیمت: 500000
فعال: بلهاین اطلاعات نباید داخل HTML ذخیره شوند. چون HTML فقط وظیفه نمایش اطلاعات را دارد.
اگر به فایلها و پوشههای پروژه نگاه کنید، در ساختار فعلی پروژه فایلی با نام sqlite3.db داریم. این فایل در واقع دیتابیس پیشفرض پروژه ماست. Django بهصورت پیشفرض برای پروژههای جدید از SQLite استفاده میکند. پس در حال حاضر ساختار ما این است:
azmoonplus-django/
│
├── config/
│
├── courses/
│
├── db.sqlite3
│
└── manage.pyاما ما مستقیماً با این فایل کار نمیکنیم. بلکه برای کار کردن با آن به مفهوم جدیدی با نام ORM نیاز داریم.
ORM مخفف عبارت Object Relational Mapping میباشد و در واقع واسطهای بین Python و Database است. فعلا همین تعریف را بخاطر بسپارید تا در زمان لازم از آن استفاده کنیم.
Model یک کلاس Python است که ساختار اطلاعاتی را که میخواهیم در Database ذخیره کنیم تعریف میکند. مثلاً میخواهیم دورههای آزمون پلاس را ذخیره کنیم. میتوانیم بگوییم:
class Course(models.Model):
title = models.CharField(max_length=200)
description = models.TextField()
price = models.DecimalField(max_digits=10, decimal_places=0)اینجا یک Model به نام Course ساختهایم که قرار است نماینده اطلاعات مربوط به دورهها باشد.
در پروژه ما در پوشه اپ یعنی پوشه courses فایلی با نام models.py قرار دارد. فایل را باز کرده و محتوای آن را به این شکل قرار دهید:
from django.db import models
class Course(models.Model):
title = models.CharField(max_length=200)
description = models.TextField()
price = models.DecimalField(
max_digits=10,
decimal_places=0
)
is_active = models.BooleanField(default=True)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
حالا تکتک قسمتها را بررسی کنیم.
CharField برای ذخیره متنهای کوتاه استفاده میشود. این کد:
title = models.CharField(max_length=200)یعنی فیلدی به نام title داریم که متن کوتاه نگه میدارد. مثلاً: آموزش پایتون یا آموزش جنگو
این قسمت max_length=200 حداکثر طول متن را مشخص میکند.
TextField برای متنهای طولانیتر استفاده میشود. این کد:
description = models.TextField()برای توضیحات دوره مناسب است. مثلاً:
در این دوره Python را از پایه یاد میگیرید
و در پایان چند پروژه کاربردی میسازیدDecimalField برای اعداد اعشاری و مقادیر عددی دقیق، مخصوصاً قیمت، مناسب است. مثلا:
price = models.DecimalField(
max_digits=10,
decimal_places=0
)IntegerField برای اعداد صحیح استفاده میشود.
BooleanField برای مقدارهای دوحالته استفاده میشود. (True یا False) مثلا کد:
is_active = models.BooleanField(default=True)یعنی دوره میتواند: فعال یا غیرفعال باشد. و default=True یعنی وقتی دوره جدید ساخته میشود، بهصورت پیشفرض فعال باشد.
DateTimeField برای ذخیره تاریخ و زمان استفاده میشود.
created_at = models.DateTimeField(auto_now_add=True)auto_now_add=True یعنی زمان ایجاد رکورد، Django خودش تاریخ و زمان را ثبت کند. مثلاً: 2026-08-25 17:20 و ما لازم نیست دستی آن را وارد کنیم.
هر رکورد در دیتابیس باید بتواند بهصورت یکتا شناسایی شود.
به این شناسه معمولاً:
Primary Key
گفته میشود.
مثلاً:
| id | title | price |
|---|---|---|
| 1 | Python | 500000 |
| 2 | Django | 700000 |
| 3 | Machine Learning | 800000 |
ستون:
idشناسه هر رکورد است.
نکته بسیار مهم:
در Model بالا ما اصلاً id ننوشتهایم.
class Course(models.Model):
title = ...اما Django خودش بهصورت پیشفرض یک Primary Key برای Model ایجاد میکند.
پس نیازی نیست همیشه خودمان بنویسیم:
id = ...__str__ چیست؟در انتهای Model نوشتهایم:
def __str__(self):
return self.titleاین متد مشخص میکند وقتی یک شیء Course را بهصورت متنی نمایش میدهیم، چه چیزی نشان داده شود.
بدون آن ممکن است چیزی شبیه این ببینیم:
Course object (1)اما با:
def __str__(self):
return self.titleمیبینیم:
آموزش Pythonپس __str__ برای خوانایی بسیار مفید است.
Model ما:
class Course(models.Model):
title = models.CharField(max_length=200)
description = models.TextField()
price = models.DecimalField(
max_digits=10,
decimal_places=0
)
is_active = models.BooleanField(default=True)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.titleدر نتیجه هر Course دارای این اطلاعات است:
id
title
description
price
is_active
created_atو Django آن را به یک جدول در Database تبدیل میکند.
بهصورت مفهومی:
Course Model
↓
courses_course Tableپاراگراف نوشته شود.
some code
دیتابیس Database و مدل Model در جنگو از درس قبل به خاطر دارید که آطلاعات دورهها به صورت ثابت داخل
طراحی قالب سایت با HTML، CSS و Tailwind CSS تا اینجا با ساختار اصلی Django، URL، View و Template آشنا
Template و رابط کاربری در Django در سه درس قبلی، با ساخت پروژه، ساختار Django، URL و View آشنا شدیم.
URL و View در جنگو در درسهای قبل با Django آشنا شدیم، محیط مجازی را ساختیم، Django را نصب کردیم
ساختار Project و App در Django در درس قبل با Django آشنا شدیم، محیط مجازی ساختیم، Django را نصب کردیم
شروع کار با Django در دوره آموزش جامع پایتون با مفاهیمی مانند متغیرها، شرطها، حلقهها، توابع، کلاسها، فایلها و کار
عملیات CRUD درSQLite در بخش قبل با مفهوم پایگاه داده، SQLite و نحوه اتصال پایتون به پایگاه داده آشنا شدیم.
اتصال به پایگاه داده (Database) در پایتون وقتی یک برنامه اطلاعاتی را از کاربر دریافت میکند، معمولاً لازم است این
مدیریت خطا (Error Handling) در پایتون در هنگام اجرای برنامه، ممکن است کاربر ورودی نامناسبی وارد کند یا برنامه با
کار با فایل، ماژول، پکیج و محیط مجازی در پایتون در پروژههای واقعی، معمولاً همهی کدها را در یک فایل
کپسولهسازی (Encapsulation) در پایتون فرض کنید کلاسی برای حساب بانکی نوشتهاید. اگر هر کسی بتواند موجودی حساب را مستقیماً تغییر
وراثت و مفاهیم پیشرفته شی گرایی تا اینجا یاد گرفتهاید که چگونه با استفاده از کلاس (Class) و شی (Object)
کلاس و شیء در پایتون (Object-Oriented Programming) تا اینجا با متغیرها، شرطها، حلقهها، توابع و ساختارهای داده در پایتون آشنا
تابع لامبدا (Lambda Function) در پایتون گاهی اوقات فقط به یک تابع خیلی کوچک نیاز داریم؛ تابعی که قرار است
توابع در پایتون اگر هنگام برنامهنویسی مجبور شوید یک قطعه کد را بارها تکرار کنید، برنامه شما طولانی، شلوغ و
مجموعه (Set) در پایتون به زبان ساده، Set مجموعهای از عناصر منحصربهفرد (Unique) است که ترتیب مشخصی ندارد و اجازه
دیکشنری در پایتون تا اینجا با لیست (List) و تاپل (Tuple) آشنا شدیم که هر دو مجموعهای از دادهها را
تاپل (Tuple) در پایتون بعد از آشنایی با لیست (List)، نوبت به یکی دیگر از ساختارهای داده در پایتون یعنی
لیست (List) در پایتون پرکاربردترین ساختار داده تا اینجا یاد گرفتید که هر متغیر فقط یک مقدار را در خود
ساختارهای داده در پایتون در برنامههای واقعی معمولاً با یک داده سروکار نداریم، بلکه باید تعداد زیادی اطلاعات را ذخیره
حلقههای تکرار در پایتون (Python Loops) فرض کنید معلم میخواهد نمرات ۳۰ دانشآموز را از کاربر دریافت کند. اگر حلقه
عملگرهای مقایسهای (Comparison Operators) تا اینجا یاد گرفتیم که با عملگرهای محاسباتی میتوانیم اعداد را با هم جمع، تفریق و…
دریافت ورودی از کاربر در پایتون (Python Input) تا اینجا یاد گرفتیم که چگونه مقدار یک متغیر را خودمان داخل
عملگرهای محاسباتی در پایتون (Arithmetic Operators) تقریباً تمام برنامهها به انجام محاسبات نیاز دارند؛ از جمع و تفریق ساده گرفته
کار با رشتهها در پایتون (Python Strings) مدیریت و پردازش متنها در برنامهها در دنیای برنامهنویسی، اطلاعات همیشه عدد و
متغیرها در پایتون (Python Variables) اولین قدم برای ذخیره و پردازش اطلاعات تصور کنید یک برنامه مینویسید که قرار است
شروع برنامه نویسی با پایتون ساخت اولین پروژه (Hello World) فهرست مطالب بعد از نصب Python چه کاری انجام دهیم؟
آموزش نصب پایتون و ابزارهای موردنیاز (راهنمای کامل برای ویندوز) اگر تصمیم گرفتهاید برنامهنویسی را یاد بگیرید، احتمالاً نام زبان
الگوهای کندل استیک پیشرفته: راهنمای جامع برای معاملهگران حرفهای الگو های کندل استیک پیشرفته (یا به بیان دیگر الگوهای شمعی
آیلتس جنرال یا آکادمیک؟ کدام را باید انتخاب کنیم؟ آیا میدانید که انتخاب اشتباه بین آیلتس آکادمیک و جنرال میتواند
دانلود رایگان نمونه سوالات آزمون PTE جنرال اگر تصمیم گرفتهاید با هدف مهاجرت به یک کشور انگلیسی زبان، در آزمون
معرفی آزمون های زبان انگلیسی معتبر در ایران| کدام یک بهتر است؟ اگه قصد ادامه تحصیل یا مهاجرت داشته باشید،
بهترین روشهای آمادگی برای آزمون تافل چگونه برای آزمون تافل آماده شویم؟ آیا شما هم قصد دارید برای کسب نمره
چگونه در خارج از کشور برای آزمون آیلتس ثبت نام کنیم؟ اگر قصد مهاجرت تحصیلی یا کاری دارید، احتمالاً نام
آزمون GRE مناسب چه رشتههایی است؟ اگر قصد ادامه تحصیل در مقاطع کارشناسی ارشد یا دکترا در دانشگاههای بینالمللی را
بهترین نمونه سوالات اسپیکینگ تافل هوم ادیشن آزمون تافل هوم ادیشن این روزها یکی از پرطرفدارترین گزینهها برای سنجش مهارت
نحوه ثبت نام در آزمون دولینگو در ایران به صورت کامل نحوه ثبت نام در آزمون دولینگو در ایران چگونه
هزینه آزمون GRE در ایران چقدر است؟ اگر قصد مهاجرت تحصیلی دارید، احتمالاً نام آزمون GRE به گوشتان خورده است.
راهنمای کامل ثبتنام و پرداخت هزینه آزمون PTE در ترکیه برای متقاضیان ایرانی آزمون PTE (Pearson Test of English) یکی از
ووچر آزمون چیست و چگونه میتوان آن را تهیه کرد؟ ثبتنام در آزمونهای بینالمللی مانند TOEFL، GRE، PTE، GMAT، IELTS
بهترین تکنیک های لیسنینگ آیلتس برای کسب نمره بالا آزمون آیلتس (IELTS) یکی از معتبرترین آزمونهای ارزیابی مهارت زبان انگلیسی
آزمون پلاس مرجع آموزش برنامهنویسی، هوش مصنوعی، شبکه، نمونه سؤالات کنکورهای کامپیوتر، آزمونهای زبان دکتری و مدارک بینالمللی فناوری اطلاعات است. با ارائه آموزشهای تخصصی، منابع آموزشی و راهنمای آزمونها، به دانشجویان و متخصصان کمک میکنیم تا مهارتهای خود را توسعه داده و در مسیر موفقیت تحصیلی و شغلی گام بردارند.