জ্যাঙ্গো কন্টেন্ট টাইপ এবং জেনেরিক রিলেশন (Django Content Types And Generic Relation)

কখনো কখনো Foreign Key ফিল্ডে আমাদের ডায়নামিক ভাবে মডেল যুক্ত করার দরকার হয়। যদিও সাধারণ ভাবে একটিForeignKey ফিল্ডে একাধিক মডেল রাখা সম্ভব না (যেখান থেকে আমরা ইচ্ছামত যেকোন একটা মডেল সিলেক্ট করতে পারি)! এক্ষেত্রে আমরা দুইভাবে কাজ করতে পারি, একাধিক Nullable ফরেন কী ফিল্ড তৈরি করে অথবা জেনেরিক রিলেশন ব্যবহার করে।

প্রথমে দেখব একাধিক ফরেন কী ফিল্ড ব্যবহার করে অপারেশনগুলো কিভাবে করা যায়। ধরা যাক আমাদের কাছে Post , Comment এবং Review নামে তিনটি মডেল আছেঃ

 

তো আমরা নিচের মত অপারেশন চালাতে পারিঃ

 

একই স্টাইলে আমরা কমেন্টের অপারেশন গুলোও করতে পারি।

 

উপরের 1.6 এবং 2.6 নং কুয়েরিতে একটি সমস্যা আছে, একটা রিভিউ যেহেতু পোস্টেরও হতে পারে আবার কমেন্টেরও হতে পারে তাই আগে থেকে জানা না থাকলে এটা বের করা ঝামেলা যে কোনো একটা রিভিউ আসলে কার! Post এর নাকি Comment এর!?
সেক্ষেত্রে আমাদেরকে আগে চেক করে বের করতে হবে রিভিউটি কার, তারপর অবজেক্টটি গেট করতে পারব!
অনেকটা এভাবেঃ

 

এই সমস্যা সহজে হ্যান্ডেল করতে পারি রিভিউতে একটি আলাদা ক্যারেক্টার ফিল্ড রেখে! যেখানে আমরা মডেলের নাম লিখে রাখব অর্থাৎ Post অথবা Comment ! পরে সেই ফিল্ড চেক করে দ্রুত বের করতে পারব এটা কার রিভিউ!

যাই হোক, ফরেন কী হিসেবে ডায়নামিক ভাবে (মাল্টিপল মডেল থেকে যেকোনো) মডেল সিলেক্ট করে দেয়ার জন্য ডিফল্ট ভাবে জ্যাঙ্গোতে সুন্দর একটা সিস্টেম আছে! ‘জেনেরিক রিলেশনস ‘ (Generic Relations )! এটা ব্যবহার করার জন্য আমাদেরকে নির্ভর করতে হবে জ্যাঙ্গোর বিল্টিন এপ ‘কন্টেন্ট টাইপ্স’ (ContentTypes) এর উপর! সংক্ষেপে, ContentTypes এপটি একটি জ্যঙ্গো প্রোজেক্টের সকল মডেলের আইডিগুলো সেভ করে রাখে! আপাতত এতটুকু জানাই আমাদের জন্য যথেষ্ট 😛 ! এখন দেখব উপরের কাজটা কনটেন্ট টাইপ আর জেনেরিক রিলেশন দিয়ে কিভাবে করে ফেলা যায়!

প্রথমেই আমদের তিনটা মডেল তৈরি করে নেই!

 

এক্ষেত্রে সুবিধা হল, এর পর আরও নতুন যত মডেলের সাথেই আমি রিভিউ এর রিলেশন করতে চাইনা কেন আমাকে রিভিউ মডেলে চেঞ্জ করতে হবেনা, জাস্ট নতুন মডেলের মধ্যে reviews = GenericRelation(Review) দিয়ে দিলেই কাজ শেষ!

 

—————————————-
লেখাটি নিজের জন্যই নোট হিসেবে রাখলাম, পরে আরো আপডেট করার ইচ্ছা আছে ইনশাল্লাহ …