Django Model Field Types: সব Field-এর বিস্তারিত বাংলা গাইড

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-এর মধ্যে পার্থক্য

বিষয়ImageFieldFileField
প্রধান ব্যবহারImage uploadবিভিন্ন file upload
Pillowপ্রয়োজনসাধারণত প্রয়োজন নেই
Upload directoryupload_toupload_to
Database-এ file bytesসাধারণত নয়সাধারণত নয়
Database-এ কী থাকেFile path/referenceFile 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 ব্যবহার করবেন?

DataRecommended Field
Product nameCharField
Blog titleCharField
Long article contentTextField
Product imageImageField
PDF documentFileField
Email addressEmailField
URL slugSlugField
Product priceDecimalField
Stock quantityPositiveIntegerField
Active statusBooleanField
Published dateDateField
Created timestampDateTimeField
Category relationshipForeignKey
Article tagsManyToManyField
User profile relationOneToOneField
Flexible JSON dataJSONField
UUID identifierUUIDField

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 পড়তে পারেন।

Spread the love