Django

⌘K
  1. Home
  2. Django
  3. Django তে কিভাবে কাজ করতে...
  4. Django-এর ডিফল্ট User মডে...
  5. User মডেলের সাথে সম্পর্কযুক্ত একটি UserProfile মডেল

User মডেলের সাথে সম্পর্কযুক্ত একটি UserProfile মডেল

Step 1: Django প্রজেক্ট এবং অ্যাপ তৈরি

প্রথমে, আপনার প্রজেক্ট তৈরি করুন এবং একটি অ্যাপ যোগ করুন:

django-admin startproject myproject
cd myproject
python manage.py startapp accounts

এখন accounts অ্যাপটিকে settings.py ফাইলে ইনস্টল করুন:

myproject/settings.py

INSTALLED_APPS = [
    # ডিফল্ট অ্যাপগুলো
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    # আমাদের নতুন অ্যাপ
    'accounts',
]

Step 2: UserProfile মডেল তৈরি করা

এবার আমরা UserProfile নামে একটি মডেল তৈরি করবো, যা Django-এর ডিফল্ট User মডেলের সাথে এক-টু-ওয়ান (One-to-One) সম্পর্ক স্থাপন করবে।

accounts/models.py

from django.db import models
from django.contrib.auth.models import User

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    bio = models.TextField(blank=True, null=True)
    location = models.CharField(max_length=100, blank=True, null=True)
    birth_date = models.DateField(blank=True, null=True)

    def __str__(self):
        return f"{self.user.username} Profile"

এখানে:

  • user ফিল্ডের মাধ্যমে আমরা User মডেলের সাথে One-to-One সম্পর্ক তৈরি করেছি।
  • bio, location, এবং birth_date ফিল্ডগুলো ব্যবহারকারী সম্পর্কিত অতিরিক্ত তথ্য সংরক্ষণ করবে।

Step 3: মাইগ্রেশন ফাইল তৈরি এবং মাইগ্রেশন চালানো

নতুন মডেল অ্যাড করার পর মাইগ্রেশন ফাইল তৈরি করুন এবং মাইগ্রেশন চালান:

python manage.py makemigrations
python manage.py migrate

Step 4: UserProfile ইনলাইন হিসেবে প্রদর্শনের জন্য অ্যাডমিন কনফিগারেশন

UserProfile মডেলটি অ্যাডমিন প্যানেলে User মডেলের ইনলাইন হিসেবে দেখাতে চাইলে, একটি কাস্টম UserAdmin তৈরি করতে হবে।

accounts/admin.py

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User
from .models import UserProfile

# UserProfile এর ইনলাইন ক্লাস তৈরি
class UserProfileInline(admin.StackedInline):
    model = UserProfile
    can_delete = False
    verbose_name_plural = 'User Profile'

# Custom UserAdmin তৈরি, যাতে UserProfile ইনলাইন হিসেবে যুক্ত হয়
class CustomUserAdmin(UserAdmin):
    inlines = (UserProfileInline,)

# ডিফল্ট User মডেলটি আনরেজিস্টার করে CustomUserAdmin সহ রেজিস্টার করা
admin.site.unregister(User)
admin.site.register(User, CustomUserAdmin)

এখন অ্যাডমিন প্যানেলে User এডিট পেজে গেলে Personal info সেকশনের নিচে User Profile নামের একটি নতুন সেকশন দেখতে পাবেন, যেখানে অতিরিক্ত bio, location, এবং birth_date ফিল্ডগুলো দেখাবে।

Step 5: UserProfile মডেলটি অটো-ক্রিয়েট এবং সেভ করা (সিগনাল ব্যবহার করে)

প্রতিবার নতুন User তৈরি হলে, সেই User এর জন্য স্বয়ংক্রিয়ভাবে একটি UserProfile তৈরি করতে চাইলে Django Signals ব্যবহার করা যায়।

accounts/signals.py

from django.db.models.signals import post_save
from django.dispatch import receiver
from django.contrib.auth.models import User
from .models import UserProfile

# User তৈরি হওয়ার পর UserProfile অটো-ক্রিয়েট করা
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
    if created:
        UserProfile.objects.create(user=instance)

# User সেভ হওয়ার পর UserProfile সেভ করা
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
    instance.userprofile.save()

এখন এই সিগনাল ফাইলটি অ্যাপের রেডি সিগনালে ইনপুট করুন:

accounts/apps.py

from django.apps import AppConfig

class AccountsConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'accounts'

    def ready(self):
        import accounts.signals

এবং accounts অ্যাপের __init__.py ফাইলে AppsConfig যুক্ত করুন:

accounts/init.py

default_app_config = 'accounts.apps.AccountsConfig'

Step 6: অ্যাডমিন প্যানেলে চেক করা

এখন সার্ভার চালান এবং অ্যাডমিন প্যানেলে যান:

python manage.py runserver

১. আপনার ব্রাউজারে http://127.0.0.1:8000/admin/ লিংকে যান। ২. User মডেলে নতুন বা বিদ্যমান ব্যবহারকারীর প্রোফাইল তথ্য যোগ বা আপডেট করুন।

এখানে আপনি দেখতে পাবেন UserProfile সম্পর্কিত ফিল্ডগুলো Personal info সেকশনের নিচে User Profile নামক নতুন সেকশনে ইনলাইন হিসেবে প্রদর্শিত হচ্ছে।

Note: এভাবে করলে আপনার UserProfile সম্পর্কিত অতিরিক্ত তথ্য ব্যবহারকারী যুক্ত করার সময় ইনলাইন হিসেবে অ্যাডমিন প্যানেলে একসাথে এডিট করা যাবে।

এটাই সম্পূর্ণ টিউটোরিয়াল! এখন আপনার Django প্রজেক্টে User এর সাথে সম্পর্কিত UserProfile মডেল রয়েছে এবং এটি অ্যাডমিন প্যানেলে ইনলাইন হিসেবে প্রদর্শিত হচ্ছে।

How can we help?