فصل 4: تعریف مدلها (Models) در جنگو

مدل چیست؟
در جنگو، مدلها (Models) همان چیزی هستند که ساختار دادهها را مشخص میکنند؛ مثلا مدل “کاربر”، “مقاله”، “محصول”. هر مدل به یک جدول در دیتابیس تبدیل میشود.
ساخت یک مدل جدید (مثال ساده)
فرض کنیم میخواهیم اطلاعات کتابها را ذخیره کنیم.
اول داخل اپلیکیشنت (مثلا app به اسم library) داخل فایل models.py این کد را بنویس:
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=50)
published_year = models.IntegerField()
توضیح:
- هر کلاس (مثلاً Book) یک جدول است.
- هر ویژگی (مانند title) یک ستون جدول است.
- نوع داده (مانند CharField یا IntegerField) نوع ستون را مشخص میکند.
بخش ۲: ساخت جداول پایگاه داده با Migration
migration چیست؟
Migration همان ارتباط بین کد مدل شما و دیتابیس واقعی است؛ یعنی جنگو خودش اسکریپت میسازد تا جدولها را بسازد یا تغییر دهد.
مراحل ساخت و اجرای migration:
۱. ساخت migration:
python manage.py makemigrations
۲. اجرای migration (ساخت جدول واقعی):
python manage.py migrate
تا اینجا جدول Book در پایگاه داده ساخته میشود.
بخش ۳: کار با پنل مدیریت (Admin)
یکی از جذابترین امکانات جنگو؛ پنل ادمین است!
فعالسازی مدل در ادمین:
در فایل admin.py اپلیکیشن:
from django.contrib import admin
from .models import Book
admin.site.register(Book)
دسترسی به پنل مدیریت:
۱. اگر کاربر ادمین نداری، بساز:
python manage.py createsuperuser
ایمیل و پسورد بده.
۲. سرور را اجرا کن:
python manage.py runserver
و برو به آدرس:
http://127.0.0.1:8000/admin
با یوزر و پسورد ادمین وارد شو و جدول Book را مدیریت کن.
بخش ۴: کار با QuerySetها و عملیات CRUD
CRUD چیست؟
- Create (ساخت)
- Read (خواندن)
- Update (بهروزرسانی)
- Delete (حذف)
مثال استفاده از مدل Book در shell جنگو:
۱. وارد محیط shell شو:
python manage.py shell
۲. چند نمونه کد برندازی جاری (نمونه کوئریها):
from library.models import Book
# ساخت کتاب جدید
Book.objects.create(title="جنگ و صلح", author="تولستوی", published_year=1869)
# همه کتابها
Book.objects.all()
# پیدا کردن یک کتاب خاص
Book.objects.get(id=1)
# ویرایش یک کتاب
book = Book.objects.get(pk=1)
book.title = "جنگ و صلح (ویرایش جدید)"
book.save()
# حذف کتاب
book.delete()
جمعبندی سریع
- با مدل، ساختار دیتابیس را در جنگو مشخص میکنی.
- با migrationها، تغییرات مدل را به دیتابیس واقعی منتقل میکنی.
- با پنل Admin، دادهها را مدیریت میکنی.
- با Querysetها به راحتی عملیات CRUD انجام میدهی.
چکیده ساده از مدلها و پایگاه داده در جنگو
۱. مدل (Model) چیست؟
مدلها در جنگو بخشی از کد هستند که ساختار و قواعد دادههای ما را مشخص میکنند.
یک جدول دیتابیس را در نظر بگیر که هر ستون آن یکی از ویژگیهای مدل ماست.
مثال ساده:
فرض کنید میخواهید نام و ایمیل دوستان خود را ذخیره کنید:
from django.db import models
class Friend(models.Model):
name = models.CharField(max_length=100)
email = models.EmailField()
۲. Migration چیست؟
Migration عملیات تبدیل تعریفهای مدلها به جداول واقعی در پایگاه داده است.
یعنی از آنجا که مدلها فقط کد هستند، migration کمک میکند اینتعریفات به جداول واقعی تبدیل شوند.
مراحل ساده:
- دستور
makemigrationsمدلها را به اسکریپتهای قابل اجرا تبدیل میکند. - دستور
migrateاین اسکریپتها را اجرا کرده و جداول را در دیتابیس میسازد.
۳. پنل مدیریت (Admin)
پلتفرمی آماده در جنگو که بدون نیاز به نوشتن کد، میتوانی دادههایت را ببینی و مدیریت کنی.
با چند خط کدنویسی، مدلهایت را در آن ثبت کن و شروع به استفاده کن.
ثبت مدل در Admin:
from django.contrib import admin
from .models import Friend
admin.site.register(Friend)
۴. QuerySetها و عملیات CRUD
CRUD عملیات اصلی مدیریت دادههاست: ساخت (Create)، خواندن (Read)، بهروزرسانی (Update)، و حذف (Delete).
مثال سریع:
from myapp.models import Friend
# ساخت یک دوست جدید
Friend.objects.create(name="علی", email="ali@example.com")
# خواندن همه دوستان
all_friends = Friend.objects.all()
# پیدا کردن یک دوست خاص
ali = Friend.objects.get(name="علی")
# تغییر اطلاعات
ali.email = "ali.new@example.com"
ali.save()
# حذف دوست
ali.delete()
خلاصه در یک نگاه:
- مدلها مثل نقشهای هستند که میگویند چگونه دادهها را ذخیره کنیم.
- با migration این نقشهها را به جداول واقعی تبدیل میکنی.
- پنل Admin هم مدیریت این دادهها را برایت راحتتر میکند.
- با QuerySetها و عملیات CRUD، به راحتی دادههایت را بساز، بخوان، ویرایش یا حذف کن.