১৩.১ : রেজিস্ট্রেশন মডেল তৈরী

আজকে থেকে আমাদের ব্যাংক ম্যানেজমেন্ট প্রজেক্ট এর কোড শুরু করবো আমরা।

একটা প্রজেক্ট তৈরী করবো আমরা নাম দিবো mamar_bank এবং এর মধ্য একটা অ্যাপ তৈরি করবো নাম দিবো accounts নিচের কমান্ড ফলো করে।

django-admin startproject mamar_bank

cd mamar_bank // change directory

django-admin startapp accounts

এখন এই অ্যাপ কে আমাদের সেটিংস এ রেজিষ্টার করে দিয়ে আসতে হবে নাইলে অ্যাপ এর কাজ গুলা প্রজেক্ট এ কোনো ইফেক্ট ফেলতে পারবে না।

এখন আমরা accounts অ্যাপ এর মধ্যে models.py এ আমাদের registration মডেল এর কাজ করবো। আমরা কিন্তু জানি যে django আমাদের কে user তৈরি করার জন্যে বিল্ট ইন মডেল দিয়ে রেখেছে নাম User মডেল যেটা থাকে django.contrib.auth.models এর মধ্যে। কিন্তু আমাদের আরো কিছু ফিল্ড প্রয়োজন যেটা ইউজার মডেল এর মধ্যে নাই। সেক্ষেত্রে ওই ফিল্ড গুলা আমরা তৈরি করে নিবো। এখন খেয়াল করে দেখো যে একজন ইউজার কিন্তু ইউনিক থাকে সবসময় সো একজন ইউজার এর একটাই মাত্র প্রোফাইল, একটাই মাত্র ইউজার নেম, first_name এইগুলা থাকবে সেটার জন্যে আমরা user মডেল এর সাথে one to one রিলেশন করলাম। তারপর account_type এ চয়েজ ফিল্ড রাখলাম, account_no কে ইউনিক রাখলাম যাতে দুইজন ইউজার এর অ্যাকাউন্ট নম্বর সেম না হয়, gender এও চয়েজ ফিল্ড রাখলাম male, female সিলেক্ট করার জন্যে, ডিপোজিট কখন করছে সেই ডেট কে store করবো এক্ষেত্রে auto_now_add True করে দিবো যাতে যখনি একটা ডিপোজিট হবে সেই ডেট টা store করে রাখা যায়। ব্যালান্স কে ইনিশিয়াল ভাবে ০ রাখলাম সেখানে ম্যাক্সিমাম ডিজিট রাখলাম ১২ ।

এখন আমরা user এই অ্যাড্রেস নিয়ে কাজ করবো। সো এখন চিন্তা করে দেখো যে একজন ইউজার এর একটাই মাত্র ইউজার অ্যাড্রেস থাকবে। সেজন্যে ইউজার অ্যাড্রেস মডেল এ আমরা ইউজার মডেল এর সাথে one to one রিলেশন করলাম। এখানে related name address দিয়েছি যেটা দিয়ে একজন ইউজার এর ডাটা অ্যাকসেস করা যাবে। এরপর street অ্যাড্রেস নিবো, সিটি, কান্ট্রি নিবো।

এখন একটা বেস্ট প্রাকটিস শিখে নেই আমরা সেটা হলো এইযে চয়েজ ফিল্ড গুলা যেহেতু ফিক্সড বা কনস্ট্যান্ট ভ্যালু অর্থাৎ চেঞ্জ হবে না সো সবাই যেটা করে একটা কনস্ট্যান্ট নামে ফাইল খুলে সেখানে ভ্যালু গুলা রাখে এবং models.py এ সেটা ইমপোর্ট করে কাজ করে।

accounts/constants.py

ACCOUNT_TYPE = (
    ('Savings', 'Savings'),
    ('Current', 'Current'),
)
GENDER_TYPE = (
    ('Male', 'Male'),
    ('Female', 'Female'),
)

accounts/models.py

from django.db import models
from django.contrib.auth.models import User
from .constants import ACCOUNT_TYPE, GENDER_TYPE
# django amaderke built in user niye kaj korar facility dey


class UserBankAccount(models.Model):
    user = models.OneToOneField(User, related_name='account', on_delete=models.CASCADE)
    account_type = models.CharField(max_length=10, choices=ACCOUNT_TYPE)
    account_no = models.IntegerField(unique=True) # account no duijon user er kokhono same hobe na
    birth_date = models.DateField(null=True, blank=True)
    gender = models.CharField(max_length=10, choices=GENDER_TYPE)
    initial_deposite_date = models.DateField(auto_now_add=True)
    balance = models.DecimalField(default=0, max_digits=12, decimal_places=2) # ekjon user 12 digit obdi taka rakhte parbe, dui doshomik ghor obdi rakhte parben 1000.50
    def __str__(self):
        return str(self.account_no)
    
class UserAddress(models.Model):
    user = models.OneToOneField(User, related_name='address', on_delete=models.CASCADE)
    street_address = models.CharField(max_length=100)
    city = models.CharField(max_length= 100)
    postal_code = models.IntegerField()
    country = models.CharField(max_length=100)
    def __str__(self):
        return str(self.user.email)

Last updated