جنگو یکی از محبوبترین فریمورکهای پایتون برای توسعهٔ برنامههای کاربردی وب است. در جنگو، مدلها بخشی از لایهٔ مدل از الگوی MVT (مدل-ویو-تمپلیت) هستند که برای ارتباط با پایگاه داده استفاده میشوند. بهروز رسانی یا آپدیت مدلها امری معمول در فرآیند توسعه است، زیرا نیازمندیها و دادهها به مرور زمان تغییر میکنند.
فرآیند آپدیت مدلها در جنگو معمولاً شامل دو بخش اصلی است؛ ابتدا تغییر مدلها در فایلهای پایتون و سپس اعمال این تغییرات به پایگاه داده با استفاده از مهاجرتها (migrations). مهاجرتها فایلهایی خودکار هستند که تغییرات مدلها را در پایگاه داده پیادهسازی میکنند.
بیایید یک مثال ساده از یک مدل را بررسی کنیم و ببینیم چگونه میتوانیم آن را آپدیت کنیم. فرض کنید یک مدل به نام Book
داریم که شامل میدانهایی مثل عنوان (title) و نویسنده (author) است. حالا بخواهیم فیلدی مثل تاریخ انتشار (publication_date) به آن اضافه کنیم. این کار نیازمند تغییر کد و سپس ایجاد مهاجرتها است.
این مراحل به شما کمک میکند که بدون آسیب رساندن به دادههای موجود، بهروزرسانیهای لازم را انجام دهید و سازگاری با پایگاه داده را حفظ کنید. با اجرای دستور makemigrations
و migrate
، مدل شما و جدول مربوطه در پایگاه داده بهروز میشوند.
در ادامه به کد مربوطه برای این فرآیند میپردازیم:
# مدل ابتدایی
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.CharField(max_length=100)
# افزودن فیلد جدید
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.CharField(max_length=100)
publication_date = models.DateField(null=True, blank=True)
# انجام مهاجرتها
# $ python manage.py makemigrations
# $ python manage.py migrate
# مدل ابتدایی
: در ابتدا، ما یک مدل ساده Book
داریم با دو فیلد title
و author
.from django.db import models
: این خط ماژول models
را از جنگو ایمپورت میکند که برای تعریف مدلها استفاده میشود.title = models.CharField(max_length=200)
: فیلد title
یک رشته با طول حداکثر ۲۰۰ کاراکتر است.author = models.CharField(max_length=100)
: فیلد author
نیز یک رشته است با حداکثر طول صد کاراکتر.# افزودن فیلد جدید
: حالا به مدل فیلد جدیدی اضافه میکنیم.publication_date = models.DateField(null=True, blank=True)
: فیلد publication_date
یک تاریخ است که میتواند خالی هم باشد (اختیاری است).# انجام مهاجرتها
: بعد از تعریف فیلد جدید، باید دستور makemigrations
را اجرا کنیم تا تغییرات را به شکل یک مهاجرت ذخیره کنیم و سپس دستور migrate
را اجرا کنیم تا این تغییرات را در پایگاه داده اعمال کنیم.