
روز ۱۵: انواع Fieldها در Model در جنگو
یکی از بخشهای حیاتی تعریف مدلها در جنگو، انتخاب صحیح نوع Field برای هر ستون جدول پایگاه داده است. هر Field مشخص میکند که چه نوع دادهای در آن ستون ذخیره میشود، چه محدودیتهایی دارد و چگونه باید اعتبارسنجی شود. انتخاب مناسب Field باعث میشود دادهها به شکل استاندارد و قابل اعتماد ذخیره شوند، فرآیند توسعه سریعتر پیش رود و عملیات پایگاه داده بدون خطا انجام شود. در این روز از دوره جنگو، با انواع Fieldهای موجود در جنگو، کاربرد هر کدام و نحوه استفاده عملی آنها در پروژه آشنا خواهیم شد.
فیلدهای متنی: CharField و TextField
دو نوع فیلد پرکاربرد برای ذخیره متن، CharField و TextField هستند. CharField برای متنهای کوتاه با طول محدود استفاده میشود و نیازمند مشخص کردن مقدار max_length است، در حالی که TextField برای متنهای بلند بدون محدودیت طول کاربرد دارد. برای مثال، نام یک کاربر یا عنوان یک دوره با CharField ذخیره میشود و توضیحات طولانی دوره با TextField مدیریت میشود.
from django.db import models
class Course(models.Model):
title = models.CharField(max_length=200)
description = models.TextField()این دو فیلد پرکاربردترین نوع داده متنی هستند و پایهای برای اکثر مدلها به حساب میآیند.
فیلدهای عددی: IntegerField، FloatField و DecimalField
برای ذخیره دادههای عددی، جنگو انواع مختلفی از Field ارائه میدهد. IntegerField برای اعداد صحیح، FloatField برای اعداد اعشاری و DecimalField برای اعداد با دقت مشخص کاربرد دارد. استفاده از DecimalField برای مقادیر مالی و محاسبات دقیق توصیه میشود تا از خطاهای ناشی از اعشار جلوگیری شود. انتخاب صحیح نوع فیلد عددی اهمیت بالایی در محاسبات و تحلیل دادهها دارد.
class Product(models.Model):
name = models.CharField(max_length=100)
price = models.DecimalField(max_digits=10, decimal_places=2)
quantity = models.IntegerField()این مثال نشان میدهد که چگونه قیمت و تعداد محصول را به صورت دقیق و استاندارد ذخیره کنیم.
فیلدهای تاریخ و زمان: DateField و DateTimeField
برای ذخیره تاریخ و زمان، جنگو دو Field اصلی ارائه میدهد: DateField برای تاریخ بدون زمان و DateTimeField برای تاریخ همراه با زمان. همچنین میتوان از ویژگی auto_now_add برای ذخیره خودکار زمان ایجاد رکورد و auto_now برای ذخیره زمان آخرین بهروزرسانی استفاده کرد. این فیلدها برای ثبت رویدادها، زمان ایجاد یا آخرین تغییر دادهها ضروری هستند.
class Event(models.Model):
name = models.CharField(max_length=100)
start_date = models.DateField()
created_at = models.DateTimeField(auto_now_add=True)استفاده از فیلدهای زمان باعث میشود اطلاعات پروژه قابل پیگیری و مرتب باشند و گزارشگیری دقیق انجام شود.
فیلدهای Boolean و Choice
برای مقادیر درست/غلط از BooleanField و برای انتخاب از مجموعه محدود از گزینهها از ChoiceField استفاده میشود. BooleanField معمولاً برای فعال یا غیرفعال بودن یک ویژگی کاربرد دارد، در حالی که ChoiceField برای انتخاب یک مقدار از بین گزینههای از پیش تعیین شده مفید است. این فیلدها به استانداردسازی دادهها و جلوگیری از خطاهای ورودی کمک میکنند.
class Student(models.Model):
name = models.CharField(max_length=100)
is_active = models.BooleanField(default=True)
level_choices = [('beginner', 'مبتدی'), ('advanced', 'پیشرفته')]
level = models.CharField(max_length=10, choices=level_choices)این مثال نشان میدهد که چگونه با فیلدهای Boolean و Choice میتوان ویژگیها و سطوح کاربران را مدیریت کرد.
فیلدهای رابطهای: ForeignKey، OneToOneField و ManyToManyField
برای ایجاد ارتباط بین مدلها، جنگو فیلدهای رابطهای ارائه میدهد. ForeignKey برای ایجاد رابطه یک به چند، OneToOneField برای رابطه یک به یک و ManyToManyField برای رابطه چند به چند کاربرد دارد. این فیلدها ساختار دادهای پیچیده و واقعی پروژهها را مدیریت میکنند و باعث میشوند پایگاه داده منظم و انعطافپذیر باقی بماند.
class Enrollment(models.Model):
student = models.ForeignKey(Student, on_delete=models.CASCADE)
course = models.ForeignKey(Course, on_delete=models.CASCADE)این مثال نشان میدهد که هر ثبتنام یک دانشآموز را به یک دوره خاص مرتبط میکند و مدیریت دادهها با ORM ساده و قابل فهم است.
نکات حرفهای در استفاده از Fieldها
استفاده از Fieldها باید با دقت و با توجه به نیاز پروژه انجام شود. همیشه فیلدهای متنی کوتاه را با CharField و متنهای بلند را با TextField ذخیره کنید، مقادیر مالی را با DecimalField مدیریت کنید و تاریخ و زمانها را با فیلدهای مخصوص ثبت کنید. همچنین استفاده از choices و محدود کردن مقدار فیلدها باعث کاهش خطاهای ورودی و افزایش استانداردسازی دادهها میشود. رعایت این نکات باعث میشود پروژه شما حرفهای، قابل توسعه و قابل نگهداری باقی بماند.
جمعبندی روز پانزدهم
در روز پانزدهم یاد گرفتیم انواع Fieldها در جنگو چیست، کاربرد هر کدام و نحوه استفاده عملی آنها در مدلها. همچنین با فیلدهای متنی، عددی، تاریخ و زمان، Boolean، Choice و فیلدهای رابطهای آشنا شدیم و مثالهای کاربردی برای مدیریت دادهها بررسی شد. تسلط بر Fieldها پایه هر پروژه جنگو است و بدون آن مدیریت دادهها، استانداردسازی و توسعه پروژه دشوار خواهد بود. یادگیری درست Fieldها باعث میشود پروژههای شما ساختاریافته، انعطافپذیر و حرفهای باقی بمانند و قابلیت ارتقا و توسعه در آینده را داشته باشند.