مدلها و نقش آنها در جنگو
در جنگو، مدلها (Models) بخشی از معماری MTV هستند که وظیفه مدیریت دادهها و تعامل با پایگاه داده را بر عهده دارند. مدلها با استفاده از ORM (Object-Relational Mapping) جنگو پیادهسازی میشوند و این امکان را فراهم میکنند که بدون نیاز به نوشتن مستقیم SQL، دادهها را در پایگاه داده ذخیره، بازیابی، بهروزرسانی و حذف کنیم.
ایجاد یک مدل در جنگو
مدلها در فایل models.py هر اپلیکیشن تعریف میشوند. برای مثال، در اپلیکیشن myapp، میتوان یک مدل Book برای مدیریت کتابها ایجاد کرد:
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.CharField(max_length=100)
published_date = models.DateField()
isbn = models.CharField(max_length=13, unique=True)
pages = models.IntegerField()
available = models.BooleanField(default=True)
def __str__(self):
return self.title
توضیح فیلدهای مدل
- CharField: برای ذخیره رشتههایی با طول مشخص.
- DateField: برای ذخیره تاریخ.
- IntegerField: برای ذخیره اعداد صحیح.
- BooleanField: برای ذخیره مقدار صحیح/غلط.
- unique=True: مقدار این فیلد نباید در دیتابیس تکراری باشد.
- default=True: مقدار پیشفرض این فیلد True است.
- __str__: متد __str__ مقدار نمایشی مدل را مشخص میکند که معمولاً نام خوانایی از شیء را بازمیگرداند.
اجرای مهاجرتها (Migrations) برای ثبت مدل در پایگاه داده
پس از تعریف مدل، باید آن را در پایگاه داده اعمال کنیم. ابتدا دستور زیر را اجرا کنید تا مهاجرتهای لازم ایجاد شوند:
سپس برای اعمال این تغییرات در پایگاه داده، دستور زیر را اجرا کنید:
تعامل با مدلها از طریق Shell جنگو
برای کار با مدلها میتوان از Shell جنگو استفاده کرد:
و سپس:
# ایجاد یک شیء جدید و ذخیره در دیتابیس
book = Book(title="جنگو برای مبتدیان", author="جان دو", published_date="2025-01-15", isbn="1234567890123", pages=300)
book.save()
# دریافت تمام کتابها
books = Book.objects.all()
print(books)
# دریافت یک کتاب خاص
book = Book.objects.get(id=1)
print(book.title)
مدیریت مدلها در پنل ادمین
برای مدیریت مدلها در پنل ادمین جنگو، باید مدل را در فایل admin.py ثبت کنیم:
from .models import Book
admin.site.register(Book)
اکنون با اجرای سرور و ورود به http://127.0.0.1:8000/admin میتوان دادههای مدل Book را از طریق رابط گرافیکی مدیریت کرد.
نتیجهگیری
مدلها در جنگو به ما این امکان را میدهند که بهصورت شیگرا با پایگاه داده کار کنیم. جنگو با استفاده از ORM بسیاری از پیچیدگیهای تعامل با دیتابیس را کاهش داده و فرآیند توسعه را سریعتر و سادهتر میکند.
