Django দিয়ে ওয়েবসাইট, ই-কমার্স সিস্টেম, ব্লগ, LMS বা যেকোনো ধরনের ওয়েব অ্যাপ্লিকেশন তৈরি করতে গেলে Model Field সম্পর্কে পরিষ্কার ধারণা থাকা প্রয়োজন। Django Model Field নির্ধারণ করে দেয় database-এ কী ধরনের তথ্য সংরক্ষণ করা হবে, সেই তথ্যের ধরন কী হবে এবং তার ওপর কী কী validation বা constraint প্রয়োগ করা যাবে।
এই গাইডে Django-এর গুরুত্বপূর্ণ Model Field Types, তাদের ব্যবহার, code examples, ImageField, FileField, TextField, relationship fields, field options এবং practical examples বিস্তারিতভাবে আলোচনা করা হয়েছে।
Django Model Field কী?
Django Model Field হলো Model class-এর এমন একটি attribute, যা database-এর একটি column-এর সঙ্গে সম্পর্কিত থাকে। প্রতিটি field নির্দিষ্ট ধরনের data সংরক্ষণের জন্য ব্যবহৃত হয়।
উদাহরণস্বরূপ, একটি Product Model-এ product name-এর জন্য CharField, বিস্তারিত description-এর জন্য TextField, price-এর জন্য DecimalField এবং product image-এর জন্য ImageField ব্যবহার করা যায়।
from django.db import models
class Product(models.Model):
name = models.CharField(max_length=255)
description = models.TextField()
price = models.DecimalField(max_digits=10, decimal_places=2)
is_active = models.BooleanField(default=True)
def __str__(self):
return self.name
এখানে name, description, price এবং is_active হলো Model Field।
1. Django Text Field Types
Text Field সাধারণত নাম, title, email address, URL, slug এবং দীর্ঘ লেখার মতো data সংরক্ষণ করতে ব্যবহৃত হয়।
CharField
CharField সাধারণ text data সংরক্ষণের জন্য ব্যবহৃত হয়। যেমন নাম, product title, category name এবং username।
name = models.CharField(max_length=100)
title = models.CharField(max_length=255)
এখানে max_length নির্ধারণ করে field-এ সর্বোচ্চ কত অক্ষর গ্রহণযোগ্য হবে। এর মান অবশ্যই দিতে হয়।
সাধারণ ব্যবহার:
- Name:
max_length=100 - Product title:
max_length=255 - Category name:
max_length=100 - Short description:
max_length=500
এগুলো সাধারণ recommendation; প্রয়োজন অনুযায়ী পরিবর্তন করা যায়।
TextField
TextField দীর্ঘ text সংরক্ষণের জন্য ব্যবহৃত হয়। Blog content, product details, article body এবং comments-এর মতো তথ্য রাখার জন্য এটি উপযোগী।
description = models.TextField()
content = models.TextField()
TextField-এ সাধারণত max_length দেওয়ার প্রয়োজন নেই। তবে এটি unlimited নয়; সর্বোচ্চ ধারণক্ষমতা ব্যবহৃত database-এর ওপর নির্ভর করে।
SlugField
SlugField সাধারণত URL-friendly text সংরক্ষণের জন্য ব্যবহার করা হয়।
slug = models.SlugField(max_length=255, unique=True)
উদাহরণ:
django-model-field-types
Slug সাধারণত URL-এ ব্যবহার করা হয়, যেমন:
https://example.com/django-model-field-types
EmailField
EmailField email address সংরক্ষণের জন্য ব্যবহৃত হয়। এটি email format validation সমর্থন করে।
email = models.EmailField(max_length=254, unique=True)
এটি email-এর অস্তিত্ব বা ownership নিশ্চিত করে না; শুধু format validation করতে সাহায্য করে।
URLField
URLField website address বা URL সংরক্ষণের জন্য ব্যবহৃত হয়।
website = models.URLField(max_length=500, blank=True)
এটি URL format validation সমর্থন করে।
UUIDField
UUIDField UUID-ধরনের unique identifier সংরক্ষণ করে।
import uuid
from django.db import models
class Product(models.Model):
id = models.UUIDField(
primary_key=True,
default=uuid.uuid4,
editable=False
)
name = models.CharField(max_length=255)
এটি public identifier বা distributed application-এ কাজে লাগতে পারে। তবে UUID-ও public access control-এর বিকল্প নয়।
2. Django Image ও File Field Types
Django-তে image এবং document upload পরিচালনার জন্য ImageField ও FileField গুরুত্বপূর্ণ।
ImageField
ImageField image upload-এর জন্য ব্যবহৃত হয়। Product photo, profile picture, blog featured image এবং thumbnail সংরক্ষণে এটি উপযোগী।
image = models.ImageField(upload_to='products/')
Image upload ব্যবহার করতে Pillow ইনস্টল করতে হবে:
python -m pip install Pillow
upload_to='products/' দিলে uploaded image সাধারণত media storage-এর products/ directory-তে রাখা হবে।
FileField
FileField সাধারণ file upload-এর জন্য ব্যবহৃত হয়। যেমন PDF, document, spreadsheet এবং অন্যান্য অনুমোদিত file format।
document = models.FileField(upload_to='documents/')
প্রয়োজনে file type ও size validation আলাদাভাবে implement করতে হবে।
ImageField ও FileField-এর মধ্যে পার্থক্য
| বিষয় | ImageField | FileField |
|---|---|---|
| প্রধান ব্যবহার | Image upload | বিভিন্ন file upload |
| Pillow | প্রয়োজন | সাধারণত প্রয়োজন নেই |
| Upload directory | upload_to | upload_to |
| Database-এ file bytes | সাধারণত নয় | সাধারণত নয় |
| Database-এ কী থাকে | File path/reference | File path/reference |
Django সাধারণত database-এ file-এর path সংরক্ষণ করে এবং file-টি filesystem বা configured storage backend-এ রাখে।
Media Configuration
settings.py-এ development-এর জন্য সাধারণ configuration:
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / 'media'
Development-এ media files পরিবেশন করতে project URL configuration-এ নিচের code ব্যবহার করা যায়:
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
# Your URL patterns
]
if settings.DEBUG:
urlpatterns += static(
settings.MEDIA_URL,
document_root=settings.MEDIA_ROOT
)
এই পদ্ধতি development-এর জন্য। Production-এ উপযুক্ত web server বা cloud storage ব্যবহার করা উচিত।
3. Django Integer ও Decimal Field Types
Number Field দিয়ে quantity, stock, age, price, rating এবং অন্যান্য numeric data সংরক্ষণ করা হয়।
IntegerField
পূর্ণসংখ্যা সংরক্ষণের জন্য ব্যবহৃত হয়।
age = models.IntegerField()
PositiveIntegerField
শূন্য বা ধনাত্মক পূর্ণসংখ্যার জন্য ব্যবহৃত হয়।
stock = models.PositiveIntegerField(default=0)
এটি stock quantity, product count এবং অন্যান্য non-negative quantity-এর জন্য ব্যবহার করা যায়।
SmallIntegerField
তুলনামূলক ছোট পরিসরের integer data-এর জন্য ব্যবহৃত হয়।
priority = models.SmallIntegerField(default=1)
BigIntegerField
বড় integer value সংরক্ষণের জন্য ব্যবহৃত হয়।
views = models.BigIntegerField(default=0)
FloatField
Floating-point number সংরক্ষণের জন্য ব্যবহৃত হয়।
rating = models.FloatField(default=0.0)
Floating-point representation-এর কারণে কিছু দশমিক মানে rounding বা precision-এর সমস্যা হতে পারে।
DecimalField
নির্দিষ্ট decimal precision-সহ numeric value সংরক্ষণের জন্য ব্যবহৃত হয়। অর্থের হিসাবের ক্ষেত্রে এটি সাধারণত FloatField-এর চেয়ে উপযুক্ত।
price = models.DecimalField(
max_digits=10,
decimal_places=2
)
এখানে:
max_digits=10: মোট সর্বোচ্চ ১০টি digit।decimal_places=2: দশমিকের পরে ২টি digit।
উদাহরণস্বরূপ, 99999999.99 এই configuration-এর মধ্যে রাখা যায়।
BinaryField
BinaryField binary data সংরক্ষণের জন্য ব্যবহৃত হয়।
data = models.BinaryField()
সাধারণ image বা document upload-এর জন্য এটি ব্যবহার না করে ImageField বা FileField ব্যবহার করাই ভালো।
4. Django Boolean Field
BooleanField
কোনো তথ্য True অথবা False কি না, তা সংরক্ষণের জন্য BooleanField ব্যবহার করা হয়।
is_active = models.BooleanField(default=True)
is_featured = models.BooleanField(default=False)
ব্যবহার:
- Product active কি না
- Article featured কি না
- User verified কি না
- Order completed কি না
যদি True, False এবং Unknown—এই তিনটি অবস্থা প্রয়োজন হয়, তাহলে database-এ NULL অনুমোদনসহ field design করা যায়। তবে business logic স্পষ্টভাবে নির্ধারণ করা উচিত।
5. Django Date ও Time Field Types
তারিখ এবং সময় সংরক্ষণের জন্য Django-তে একাধিক field রয়েছে।
DateField
শুধু তারিখ সংরক্ষণ করে।
published_date = models.DateField()
TimeField
শুধু সময় সংরক্ষণ করে।
opening_time = models.TimeField()
DateTimeField
তারিখ এবং সময় একসঙ্গে সংরক্ষণ করে।
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
auto_now_add=True: object প্রথম তৈরি হওয়ার সময় timestamp সেট করে।auto_now=True: object save হওয়ার সময় timestamp update করে।
সাধারণত created time এবং updated time-এর জন্য এগুলো ব্যবহৃত হয়।
DurationField
সময়কাল বা duration সংরক্ষণের জন্য ব্যবহৃত হয়।
duration = models.DurationField()
Course duration, processing time বা কোনো task-এর elapsed time সংরক্ষণে এটি কাজে লাগতে পারে।
6. Django Relationship Field Types
একাধিক Model-এর মধ্যে সম্পর্ক তৈরির জন্য relationship fields ব্যবহার করা হয়।
ForeignKey
ForeignKey দিয়ে Many-to-One relationship তৈরি করা হয়।
class Category(models.Model):
name = models.CharField(max_length=100)
class Product(models.Model):
name = models.CharField(max_length=255)
category = models.ForeignKey(
Category,
on_delete=models.PROTECT,
related_name='products'
)
এখানে একটি Category-এর অধীনে একাধিক Product থাকতে পারে, কিন্তু প্রতিটি Product একটি Category-এর সঙ্গে যুক্ত।
on_delete নির্ধারণ করে referenced object delete হলে কী হবে। যেমন CASCADE, PROTECT, SET_NULL এবং SET_DEFAULT।
OneToOneField
দুটি Model-এর মধ্যে One-to-One relationship তৈরির জন্য ব্যবহার করা হয়।
class UserProfile(models.Model):
user = models.OneToOneField(
'auth.User',
on_delete=models.CASCADE
)
bio = models.TextField(blank=True)
এই উদাহরণে প্রতিটি User-এর সঙ্গে সর্বোচ্চ একটি UserProfile যুক্ত হতে পারে। বাস্তব project-এ custom user model থাকলে settings.AUTH_USER_MODEL ব্যবহার করা ভালো।
ManyToManyField
একাধিক object-এর সঙ্গে একাধিক object-এর সম্পর্ক তৈরির জন্য ব্যবহৃত হয়।
class Tag(models.Model):
name = models.CharField(max_length=100)
class Article(models.Model):
title = models.CharField(max_length=255)
tags = models.ManyToManyField(Tag, blank=True)
একটি Article-এ অনেক Tag থাকতে পারে এবং একটি Tag অনেক Article-এ ব্যবহার করা যায়।
7. Django-এর আরও গুরুত্বপূর্ণ Field Types
JSONField
Dictionary, list এবং JSON-compatible data সংরক্ষণের জন্য ব্যবহৃত হয়।
settings = models.JSONField(default=dict, blank=True)
যেমন:
{
"color": "black",
"size": "large",
"featured": true
}
Database support ও query capability ব্যবহৃত database-এর ওপর নির্ভর করে। পরিবর্তনযোগ্য default value হিসেবে default={} না দিয়ে default=dict ব্যবহার করা উচিত।
GenericIPAddressField
IPv4 অথবা IPv6 address সংরক্ষণের জন্য ব্যবহৃত হয়।
ip_address = models.GenericIPAddressField(
protocol='both',
unpack_ipv4=False,
null=True,
blank=True
)
FilePathField
Server filesystem-এর নির্দিষ্ট directory-তে থাকা file path নির্বাচন বা সংরক্ষণ করতে ব্যবহার করা যায়।
file_path = models.FilePathField(
path='/some/directory',
blank=True
)
এটি সাধারণ user file upload-এর বিকল্প নয়।
AutoField
স্বয়ংক্রিয়ভাবে integer primary key তৈরি করে।
id = models.AutoField(primary_key=True)
BigAutoField
বড় integer range-সহ automatically incrementing primary key তৈরি করে।
id = models.BigAutoField(primary_key=True)
Django-এর default primary key configuration-এ BigAutoField ব্যবহার করা যেতে পারে।
8. Django Model Field Options
Field type ছাড়াও field options সম্পর্কে জানা জরুরি।
max_length
CharField, SlugField এবং কিছু অন্যান্য field-এ সর্বোচ্চ দৈর্ঘ্য নির্ধারণ করে।
name = models.CharField(max_length=100)
null
Database-এ NULL রাখা যাবে কি না নির্ধারণ করে।
published_date = models.DateField(null=True, blank=True)
blank
Form validation-এর সময় field ফাঁকা রাখা যাবে কি না নির্ধারণ করে।
description = models.TextField(blank=True)
null database-এর সঙ্গে সম্পর্কিত; blank validation-এর সঙ্গে সম্পর্কিত।
default
Default value নির্ধারণ করে।
stock = models.PositiveIntegerField(default=0)
unique
একই field-এ duplicate value নিষিদ্ধ করে।
email = models.EmailField(unique=True)
db_index
Field-এর ওপর database index তৈরি করতে ব্যবহার করা হয়।
slug = models.SlugField(db_index=True)
Index query performance উন্নত করতে পারে, তবে অতিরিক্ত index storage এবং write operation-এর খরচ বাড়ায়।
choices
নির্দিষ্ট option-এর মধ্যে value সীমাবদ্ধ করতে ব্যবহার করা হয়।
class Order(models.Model):
class Status(models.TextChoices):
PENDING = 'pending', 'Pending'
PROCESSING = 'processing', 'Processing'
COMPLETED = 'completed', 'Completed'
CANCELLED = 'cancelled', 'Cancelled'
status = models.CharField(
max_length=20,
choices=Status.choices,
default=Status.PENDING
)
এতে order status-এর জন্য নির্দিষ্ট choice পাওয়া যায়।
editable
Admin বা Model Form-এ field edit করা যাবে কি না নিয়ন্ত্রণ করে।
created_at = models.DateTimeField(
auto_now_add=True,
editable=False
)
help_text
Field সম্পর্কে অতিরিক্ত নির্দেশনা প্রদর্শন করতে সাহায্য করে।
phone = models.CharField(
max_length=20,
help_text='Enter your phone number with country code.'
)
verbose_name
Field-এর readable label নির্ধারণ করে।
first_name = models.CharField(
max_length=100,
verbose_name='First Name'
)
9. কোন কাজের জন্য কোন Field ব্যবহার করবেন?
| Data | Recommended Field |
|---|---|
| Product name | CharField |
| Blog title | CharField |
| Long article content | TextField |
| Product image | ImageField |
| PDF document | FileField |
| Email address | EmailField |
| URL slug | SlugField |
| Product price | DecimalField |
| Stock quantity | PositiveIntegerField |
| Active status | BooleanField |
| Published date | DateField |
| Created timestamp | DateTimeField |
| Category relationship | ForeignKey |
| Article tags | ManyToManyField |
| User profile relation | OneToOneField |
| Flexible JSON data | JSONField |
| UUID identifier | UUIDField |
10. Complete Django Product Model Example
নিচের উদাহরণে একটি সাধারণ e-commerce Product Model তৈরি করা হয়েছে।
from django.db import models
import uuid
class Category(models.Model):
name = models.CharField(max_length=100, unique=True)
slug = models.SlugField(max_length=120, unique=True)
def __str__(self):
return self.name
class Product(models.Model):
id = models.UUIDField(
primary_key=True,
default=uuid.uuid4,
editable=False
)
category = models.ForeignKey(
Category,
on_delete=models.PROTECT,
related_name='products'
)
name = models.CharField(max_length=255)
slug = models.SlugField(max_length=255, unique=True)
short_description = models.CharField(
max_length=500,
blank=True
)
description = models.TextField()
image = models.ImageField(
upload_to='products/',
blank=True
)
price = models.DecimalField(
max_digits=10,
decimal_places=2
)
stock = models.PositiveIntegerField(default=0)
is_active = models.BooleanField(default=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.name
এই Model-এ product name, slug, description, image, price, stock, category এবং timestamps রয়েছে।
Model তৈরি বা পরিবর্তন করার পর নিচের command চালাতে হবে:
python manage.py makemigrations
python manage.py migrate
11. Django Model Field ব্যবহারের সময় সাধারণ ভুল
১. CharField-এ max_length না দেওয়া: CharField ব্যবহার করার সময় max_length নির্ধারণ করতে হবে।
২. Price-এর জন্য FloatField ব্যবহার করা: আর্থিক হিসাবের জন্য সাধারণত DecimalField বেশি উপযুক্ত।
৩. Image upload-এর জন্য URLField ব্যবহার করা: সরাসরি upload করতে চাইলে ImageField ব্যবহার করুন। শুধু external image URL সংরক্ষণ করতে চাইলে URLField ব্যবহার করা যায়।
৪. null=True ও blank=True-কে একই মনে করা: দুটি আলাদা উদ্দেশ্যে কাজ করে।
৫. File validation উপেক্ষা করা: Uploaded file-এর extension, content, size এবং access control প্রয়োজন অনুযায়ী validate করতে হবে।
৬. Migration চালাতে ভুলে যাওয়া: Model পরিবর্তনের পরে প্রয়োজনীয় migration তৈরি এবং প্রয়োগ করতে হবে।
৭. সব field-এ অতিরিক্ত index ব্যবহার করা: Index প্রয়োজন অনুযায়ী ব্যবহার করতে হবে।
উপসংহার
Django Model Field Types সম্পর্কে পরিষ্কার ধারণা থাকলে database structure তৈরি, data validation এবং application development অনেক সহজ হয়। সাধারণ text-এর জন্য CharField, দীর্ঘ লেখার জন্য TextField, image upload-এর জন্য ImageField, document upload-এর জন্য FileField, অর্থের হিসাবের জন্য DecimalField এবং Model-এর মধ্যে সম্পর্ক তৈরির জন্য relationship fields ব্যবহার করা যায়।
একটি ভালো Django application তৈরি করতে শুধু সঠিক field নির্বাচন করলেই হবে না; পাশাপাশি field options, database constraints, file storage, validation এবং migration-এর বিষয়গুলোও বুঝতে হবে।
Django-এর official documentation থেকে আরও বিস্তারিত জানতে Model Field Reference এবং File Uploads পড়তে পারেন।