آپدیت مدل‌ها در جنگو

django update model
20 آبان 1403

جنگو یکی از محبوب‌ترین فریم‌ورک‌های پایتون برای توسعهٔ برنامه‌های کاربردی وب است. در جنگو، مدل‌ها بخشی از لایهٔ مدل از الگوی 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 را اجرا کنیم تا این تغییرات را در پایگاه داده اعمال کنیم.

سوالات متداول

؟

چرا باید از مهاجرت‌ها در جنگو استفاده کنم؟

؟

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

؟

چگونه می‌توانم مطمئن شوم که مهاجرت‌ها به درستی اجرا شده‌اند؟