دیتابیس Database و مدل Model در جنگو

از درس قبل به خاطر دارید که آطلاعات دوره‌ها به صورت ثابت داخل کدهای HTML در صفحه اصلی نوشته شده بود. اما در پروژه‌های واقعی، اطلاعات را در یک پایگاه داده یا Database  ذخیره می‌کنیم. بنابراین باید راهی برای خواندن اطلاعات از پایگاه داده ، داشته باشیم. در این درس قصد داریم همین کار را انجام دهیم. اما به دلیل اهمیت مطلب، ممکن است این موضوع کمی طولانی شده و در بیش از یک درس گنجانده شود.

فهرست مطالب

Database چیست؟

Database یا پایگاه داده محلی برای ذخیره و مدیریت اطلاعات است. مثلاً سایت آزمون پلاس در آینده اطلاعات مختلفی خواهد داشت:

کاربران
دوره‌ها
مدرس‌ها
دسته‌بندی‌ها
محصولات
سفارش‌ها
پرداخت‌ها
آزمون‌ها
سؤالات
پاسخ‌ها

برای مثال، اطلاعات یک دوره می‌تواند به این شکل باشد:

نام دوره: Python
توضیحات: آموزش Python از پایه تا پروژه
قیمت: 500000
فعال: بله

این اطلاعات نباید داخل HTML ذخیره شوند. چون HTML فقط وظیفه نمایش اطلاعات را دارد.

دیتابیس پروژه ما

اگر به فایل‌ها و پوشه‌های پروژه نگاه کنید، در ساختار فعلی پروژه فایلی با نام  sqlite3.db داریم. این فایل در واقع دیتابیس پیش‌فرض پروژه ماست. Django به‌صورت پیش‌فرض برای پروژه‌های جدید از SQLite استفاده می‌کند. پس در حال حاضر ساختار ما این است:

azmoonplus-django/
│
├── config/
│
├── courses/
│
├── db.sqlite3
│
└── manage.py

اما ما مستقیماً با این فایل کار نمی‌کنیم. بلکه برای کار کردن با آن به مفهوم جدیدی با نام ORM نیاز داریم.

ORM چیست؟

ORM مخفف عبارت Object Relational Mapping می‌باشد و در واقع واسطه‌ای بین Python و Database است. فعلا همین تعریف را بخاطر بسپارید تا در زمان لازم از آن استفاده کنیم.

Model چیست؟

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 ساخته‌ایم که قرار است نماینده اطلاعات مربوط به دوره‌ها باشد.

ساخت اولین Model پروژه

در پروژه ما در پوشه اپ یعنی پوشه 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
)
در این کد max_digits حداکثر تعداد رقم‌ها را مشخص می‌کند. و decimal_places تعداد رقم‌های بعد از اعشار را مشخص می‌کند.
 
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 چیست؟

هر رکورد در دیتابیس باید بتواند به‌صورت یکتا شناسایی شود.

به این شناسه معمولاً:

Primary Key

گفته می‌شود.

مثلاً:

idtitleprice
1Python500000
2Django700000
3Machine Learning800000

ستون:

 
id
 

شناسه هر رکورد است.

نکته بسیار مهم:

در Model بالا ما اصلاً id ننوشته‌ایم.

 
class Course(models.Model):
    title = ...
 

اما Django خودش به‌صورت پیش‌فرض یک Primary Key برای Model ایجاد می‌کند.

پس نیازی نیست همیشه خودمان بنویسیم:

 
id = ...
 

14. __str__ چیست؟

در انتهای Model نوشته‌ایم:

 
def __str__(self):
    return self.title
 

این متد مشخص می‌کند وقتی یک شیء Course را به‌صورت متنی نمایش می‌دهیم، چه چیزی نشان داده شود.

بدون آن ممکن است چیزی شبیه این ببینیم:

 
Course object (1)
 

اما با:

 
def __str__(self):
    return self.title
 

می‌بینیم:

 
آموزش Python
 

پس __str__ برای خوانایی بسیار مفید است.


15. جمع‌بندی Model فعلی

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 here

📝 تمرین

متن تمرین
some code

عنوان مطلب بعدی

پاراگراف نوشته شود.

گام بعدی :

برای شرکت در آزمون آماده‌اید؟

با ورود به پنل کاربری می‌توانید جهت ثبت نام در آزمون‌ها و دسترسی به منابع آموزشی اقدام نمایید. کارشناسان ما در اسرع وقت با شما تماس می‌گیرند.

شروع کار با Django

شروع کار با Django در دوره آموزش جامع پایتون با مفاهیمی مانند متغیرها، شرط‌ها، حلقه‌ها، توابع، کلاس‌ها، فایل‌ها و کار

ادامه مطلب »

عملیات CRUD در SQLite

عملیات CRUD درSQLite در بخش قبل با مفهوم پایگاه داده، SQLite و نحوه اتصال پایتون به پایگاه داده آشنا شدیم.

ادامه مطلب »

توابع در پایتون

توابع در پایتون اگر هنگام برنامه‌نویسی مجبور شوید یک قطعه کد را بارها تکرار کنید، برنامه شما طولانی، شلوغ و

ادامه مطلب »

مجموعه در پایتون

مجموعه (Set) در پایتون به زبان ساده، Set مجموعه‌ای از عناصر منحصربه‌فرد (Unique) است که ترتیب مشخصی ندارد و اجازه

ادامه مطلب »

تاپل در پایتون

تاپل (Tuple) در پایتون بعد از آشنایی با لیست (List)، نوبت به یکی دیگر از ساختارهای داده در پایتون یعنی

ادامه مطلب »

لیست در پایتون

لیست (List) در پایتون پرکاربردترین ساختار داده​ تا اینجا یاد گرفتید که هر متغیر فقط یک مقدار را در خود

ادامه مطلب »

آموزش نصب پایتون

آموزش نصب پایتون و ابزارهای موردنیاز (راهنمای کامل برای ویندوز) اگر تصمیم گرفته‌اید برنامه‌نویسی را یاد بگیرید، احتمالاً نام زبان

ادامه مطلب »