Django দিয়ে ওয়েব অ্যাপ্লিকেশন তৈরি করার সময় Model Field-এর সঙ্গে max_length, null=True, blank=True, default, unique=True এবং choices-এর মতো বিভিন্ন parameter ব্যবহার করতে হয়। এই parameters নির্ধারণ করে database-এ কীভাবে data সংরক্ষণ হবে, কোন value গ্রহণযোগ্য হবে এবং form-এ user কীভাবে তথ্য দিতে পারবে।
Django Model Field Parameters সম্পর্কে সঠিক ধারণা থাকলে database design, data validation এবং application development সহজ হয়। এই গাইডে গুরুত্বপূর্ণ Django field options, তাদের ব্যবহার, practical code examples এবং সাধারণ ভুলগুলো ব্যাখ্যা করা হয়েছে।
Django Model Field Parameters কী?
Django Model Field Parameter হলো field-এর আচরণ, validation, database storage বা presentation নিয়ন্ত্রণ করার জন্য ব্যবহৃত argument।
উদাহরণ:
from django.db import models
class Product(models.Model):
name = models.CharField(
max_length=255,
unique=True,
blank=False
)
description = models.TextField(
blank=True
)
price = models.DecimalField(
max_digits=10,
decimal_places=2,
default=0
)
এখানে max_length, unique, blank, max_digits, decimal_places এবং default হলো field parameters।
সব parameter সব field-এর জন্য প্রযোজ্য নয়। কোন field-এ কোন parameter ব্যবহার করা যাবে, তা Django-এর field type ও version-এর ওপর নির্ভর করে।
1. max_length
max_length নির্ধারণ করে কোনো text field-এর সর্বোচ্চ দৈর্ঘ্য কত হবে। এটি সাধারণত CharField, SlugField, EmailField এবং URLField-এর মতো field-এ ব্যবহৃত হয়।
name = models.CharField(max_length=100)
title = models.CharField(max_length=255)
email = models.EmailField(max_length=254)
এখানে name সর্বোচ্চ ১০০ অক্ষর এবং title সর্বোচ্চ ২৫৫ অক্ষর গ্রহণ করার জন্য নির্ধারিত।
TextField-এ সাধারণত max_length দেওয়া বাধ্যতামূলক নয়। এটি দীর্ঘ article, blog content এবং product description-এর জন্য উপযোগী।
2. null=True
null=True ব্যবহার করলে database-এ field-এর value হিসেবে NULL রাখা যায়।
phone = models.CharField(
max_length=20,
null=True
)
এই উদাহরণে phone field-এর database value NULL হতে পারে।
সাধারণত database-এ কোনো value অনুপস্থিত থাকাকে NULL দিয়ে প্রকাশ করা হয়।
মনে রাখবে, null=True নিজে থেকে Django form-এ field খালি রাখার অনুমতি দেয় না।
3. blank=True
blank=True নির্ধারণ করে Django-এর form validation-এ field খালি রাখা যাবে কি না।
description = models.TextField(
blank=True
)
এখানে description না দিলেও Django-এর সাধারণ form validation-এ field-টি গ্রহণযোগ্য হবে।
blank=True এবং null=True এক জিনিস নয়। প্রথমটি validation-এর সঙ্গে এবং দ্বিতীয়টি database storage-এর সঙ্গে সম্পর্কিত।
4. default
কোনো value সরবরাহ না করা হলে default নির্ধারিত value ব্যবহার করে।
stock = models.PositiveIntegerField(default=0)
is_active = models.BooleanField(default=True)
Product তৈরি করার সময় stock নির্ধারণ না করলে এটি 0 হবে এবং is_active-এর default value হবে True।
Dictionary বা list-এর মতো mutable value-এর জন্য সরাসরি object না দিয়ে callable ব্যবহার করা উচিত।
settings = models.JSONField(default=dict)
এখানে default=dict প্রতিটি নতুন instance-এর জন্য নতুন dictionary তৈরি করে।
5. unique=True
unique=True নির্ধারণ করে database-এ একই field-এর duplicate value গ্রহণযোগ্য হবে না।
email = models.EmailField(unique=True)
slug = models.SlugField(max_length=255, unique=True)
এটি email address বা slug unique রাখার জন্য কাজে লাগে।
তবে unique=True থাকলেও email address সত্যিই ব্যবহারকারীর নিজের কি না তা যাচাই হয় না। প্রয়োজনে email verification ব্যবস্থা তৈরি করতে হবে।
6. primary_key=True
primary_key=True কোনো field-কে Model-এর primary key হিসেবে নির্ধারণ করে।
product_code = models.CharField(
max_length=20,
primary_key=True
)
Primary key প্রতিটি database record-কে স্বতন্ত্রভাবে শনাক্ত করে।
একটি Model-এ সাধারণত একটি primary key থাকে। নিজে primary key নির্ধারণ না করলে Django স্বয়ংক্রিয় primary key তৈরি করে।
7. db_index=True
db_index=True database-এ নির্দিষ্ট field-এর ওপর index তৈরি করে।
class Article(models.Model):
title = models.CharField(max_length=255)
slug = models.SlugField(db_index=True)
Index কিছু query দ্রুত করতে পারে, বিশেষ করে যেসব field দিয়ে নিয়মিত search বা filtering করা হয়।
তবে অতিরিক্ত index database storage বাড়ায় এবং data insert বা update-এর সময় অতিরিক্ত কাজ তৈরি করে। তাই প্রয়োজন অনুযায়ী index ব্যবহার করা উচিত।
8. choices
choices ব্যবহার করে কোনো field-এর জন্য নির্দিষ্ট option তৈরি করা যায়।
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 নির্ধারিত চারটি option-এর মধ্যে সীমাবদ্ধ রাখা হয়েছে।
choices form ও Model validation-এ সুবিধা দেয়। তবে সরাসরি database-level constraint প্রয়োজন হলে আলাদাভাবে constraint নির্ধারণ করতে হতে পারে।
9. editable=False
editable=False নির্ধারণ করে field-টি সাধারণ Django Model Form ও admin form-এ সম্পাদনাযোগ্য হবে কি না।
created_at = models.DateTimeField(
auto_now_add=True,
editable=False
)
Created timestamp-এর মতো স্বয়ংক্রিয়ভাবে নিয়ন্ত্রিত field-এর জন্য এটি ব্যবহার করা যায়।
তবে এটি নিজে থেকে সব ধরনের direct database update বা programmatic modification বন্ধ করে না।
10. verbose_name
verbose_name field-এর readable নাম নির্ধারণ করে।
name = models.CharField(
max_length=100,
verbose_name="Product Name"
)
Django Admin বা Model Form-এ field label হিসেবে এই নাম ব্যবহার করা যেতে পারে।
11. help_text
help_text field-এর পাশে অতিরিক্ত নির্দেশনা দিতে ব্যবহৃত হয়।
phone = models.CharField(
max_length=20,
help_text="Enter your phone number with country code."
)
এটি user-কে সঠিক তথ্য দিতে সাহায্য করে।
12. validators
validators দিয়ে অতিরিক্ত validation rule প্রয়োগ করা যায়।
from django.db import models
from django.core.validators import MinValueValidator
class Product(models.Model):
price = models.DecimalField(
max_digits=10,
decimal_places=2,
validators=[MinValueValidator(0)]
)
এখানে Django-এর সাধারণ validation চালানোর সময় price-এর মান শূন্যের কম হলে validation error হবে।
মনে রাখবে, শুধু validator ব্যবহার করলেই সব ধরনের database write-এর ক্ষেত্রে constraint নিশ্চিত হয় না। প্রয়োজন অনুযায়ী database constraint-ও ব্যবহার করতে হবে।
13. error_messages
error_messages দিয়ে field-এর নির্দিষ্ট validation error message কাস্টমাইজ করা যায়।
name = models.CharField(
max_length=100,
error_messages={
"required": "Product name is required.",
"max_length": "Product name is too long."
}
)
এই message সাধারণত সংশ্লিষ্ট Django validation context-এ ব্যবহার হয়। সব database error-এর message কাস্টমাইজ করার জন্য এটি নয়।
14. db_column
db_column ব্যবহার করে database-এ field-এর column name নির্ধারণ করা যায়।
name = models.CharField(
max_length=100,
db_column="product_name"
)
Python code-এ field-এর নাম name থাকলেও database column-এর নাম হবে product_name।
Existing database-এর সঙ্গে কাজ করার সময় এটি বিশেষভাবে কাজে লাগতে পারে।
15. db_default
db_default database-level default value নির্ধারণ করে। এটি Django 5.0 থেকে পাওয়া যায়।
stock = models.PositiveIntegerField(
db_default=0
)
default এবং db_default-এর মধ্যে পার্থক্য রয়েছে।
default: Django-এর মাধ্যমে instance তৈরি করার সময় default value দেয়।db_default: database-এ default value নির্ধারণ করে।
কিছু ক্ষেত্রে দুটিই একসঙ্গে ব্যবহার করা যায়। Database-এর default expression ও backend support অনুযায়ী আচরণ ভিন্ন হতে পারে।
16. ImageField ও FileField-এর বিশেষ Parameters
Image এবং file upload-এর জন্য কিছু field-specific parameter ব্যবহার করা হয়।
upload_to
image = models.ImageField(
upload_to="products/",
blank=True
)
upload_to uploaded file কোন directory বা path-এ রাখা হবে তা নির্ধারণ করে।
width_field ও height_field
image = models.ImageField(
upload_to="products/",
width_field="image_width",
height_field="image_height"
)
image_width = models.PositiveIntegerField(
null=True,
blank=True
)
image_height = models.PositiveIntegerField(
null=True,
blank=True
)
এই parameters image-এর width এবং height স্বয়ংক্রিয়ভাবে সংশ্লিষ্ট field-এ সংরক্ষণ করতে সাহায্য করে।
ImageField ব্যবহারের জন্য Pillow ইনস্টল করতে হয়:
python -m pip install Pillow
File upload-এর ক্ষেত্রে শুধু extension-এর ওপর নির্ভর না করে file content, size এবং security যাচাই করা উচিত।
17. Relationship Field Parameters
ForeignKey, OneToOneField এবং ManyToManyField-এর মতো relationship field-এ কিছু বিশেষ parameter রয়েছে।
on_delete
category = models.ForeignKey(
"Category",
on_delete=models.PROTECT
)
on_delete referenced object delete হলে Django কী আচরণ করবে তা নির্ধারণ করে।
সাধারণ option:
models.CASCADE: সম্পর্কিত object-ও delete হতে পারে।models.PROTECT: সম্পর্কিত object মুছে ফেলা বাধা দেয়।models.SET_NULL: সম্পর্কটিNULLকরে; field-এnull=Trueপ্রয়োজন।models.SET_DEFAULT: field-এর default value ব্যবহার করে।models.RESTRICT: সম্পর্কিত object delete হওয়ার ওপর restriction প্রয়োগ করে।
related_name
category = models.ForeignKey(
"Category",
on_delete=models.CASCADE,
related_name="products"
)
এখানে category.products.all() ব্যবহার করে একটি category-এর product-গুলো পাওয়া যাবে।
through
ManyToManyField-এর ক্ষেত্রে through দিয়ে intermediary Model নির্ধারণ করা যায়। সম্পর্কের সঙ্গে অতিরিক্ত তথ্য সংরক্ষণ করতে এটি কাজে লাগে।
18. DateTimeField-এর বিশেষ Parameters
auto_now_add
created_at = models.DateTimeField(
auto_now_add=True
)
Object প্রথম তৈরি হওয়ার সময় timestamp নির্ধারণ করে।
auto_now
updated_at = models.DateTimeField(
auto_now=True
)
প্রতিবার Model instance save করার সময় timestamp update করে।
এই option-গুলো সাধারণত created time এবং updated time-এর জন্য ব্যবহার করা হয়।
19. Django Model Field Parameters-এর Quick Reference
| Parameter | প্রধান ব্যবহার |
|---|---|
max_length | Text-এর দৈর্ঘ্য সীমিত করা |
null | Database-এ NULL অনুমোদন |
blank | Validation-এ খালি value অনুমোদন |
default | Django-level default value |
db_default | Database-level default |
unique | Duplicate value প্রতিরোধ |
primary_key | Primary key নির্ধারণ |
db_index | Database index তৈরি |
choices | নির্দিষ্ট option নির্ধারণ |
editable | সাধারণ form-এ editing নিয়ন্ত্রণ |
help_text | সহায়ক নির্দেশনা |
verbose_name | Readable field label |
validators | অতিরিক্ত validation |
error_messages | Validation error message কাস্টমাইজ |
db_column | Database column-এর নাম |
upload_to | File upload path |
auto_now | Save-এর সময় timestamp update |
auto_now_add | Creation-এর সময় timestamp |
on_delete | Relationship deletion behaviour |
related_name | Reverse relationship-এর নাম |
এই তালিকা গুরুত্বপূর্ণ parameter-গুলোর quick reference। এটি সব Django field-এর সব argument-এর সম্পূর্ণ তালিকা নয়; বিস্তারিত জানতে official documentation দেখা উচিত।
20. Practical Example: Complete Product Model
নিচে বিভিন্ন parameter ব্যবহার করে একটি Product Model তৈরি করা হয়েছে।
from django.db import models
from django.core.validators import MinValueValidator
class Category(models.Model):
name = models.CharField(
max_length=100,
unique=True
)
def __str__(self):
return self.name
class Product(models.Model):
name = models.CharField(
max_length=255,
unique=True,
help_text="Enter the product name"
)
description = models.TextField(
blank=True
)
category = models.ForeignKey(
Category,
on_delete=models.PROTECT,
related_name="products"
)
price = models.DecimalField(
max_digits=10,
decimal_places=2,
validators=[MinValueValidator(0)]
)
stock = models.PositiveIntegerField(
default=0
)
image = models.ImageField(
upload_to="products/",
blank=True
)
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-এ text, image, price, stock, category relationship এবং timestamp-এর পাশাপাশি বিভিন্ন parameter ব্যবহার করা হয়েছে।
Model তৈরি বা পরিবর্তন করার পর migration তৈরি ও প্রয়োগ করো:
python manage.py makemigrations
python manage.py migrate
21. Django Model Field Parameters ব্যবহারের সাধারণ ভুল
null=True এবং blank=True-কে একই মনে করা: একটি database storage-এর সঙ্গে, অন্যটি validation-এর সঙ্গে সম্পর্কিত।
প্রতিটি field-এ null=True ব্যবহার করা: অপ্রয়োজনীয় NULL value data handling জটিল করতে পারে।
Price-এর জন্য FloatField ব্যবহার করা: নির্ভুল monetary calculation-এর জন্য সাধারণত DecimalField উপযুক্ত।
unique=True-কে সম্পূর্ণ validation system মনে করা: এটি duplicate value নিয়ন্ত্রণে সাহায্য করে, কিন্তু email verification বা business logic-এর বিকল্প নয়।
অপ্রয়োজনীয় database index তৈরি করা: Index query দ্রুত করতে পারে, কিন্তু অতিরিক্ত index write performance ও storage-এ প্রভাব ফেলে।
File upload-এ validation বাদ দেওয়া: User-uploaded file নিরাপদে সংরক্ষণ ও পরিবেশন করার ব্যবস্থা প্রয়োজন।
উপসংহার
Django Model Field Parameters database structure এবং data validation-এর গুরুত্বপূর্ণ অংশ। max_length, null, blank, default, unique, choices, validators এবং relationship-specific parameters সঠিকভাবে ব্যবহার করলে application-এর data management আরও নির্ভরযোগ্য হয়।
কোনো parameter ব্যবহার করার আগে সেটি সংশ্লিষ্ট field-এর জন্য সমর্থিত কি না, database-এ কী প্রভাব ফেলবে এবং form validation-এ কী আচরণ করবে তা বুঝে নেওয়া উচিত।
Django-এর version অনুযায়ী parameter ও feature-এর প্রাপ্যতা যাচাই করার জন্য official documentation অনুসরণ করুন।
আরও জানুন: