ইতিমধ্যে পোস্ট করা উত্তরগুলি দিয়ে গেছে। কেবল ভেবেছিলাম যদি আমি প্রকৃত উদাহরণ সহ একটি উত্তর যুক্ত করি তবে এটি আরও ভাল হবে।
যাক 'আপনার কাছে 3 জ্যাঙ্গো মডেল রয়েছে যা সম্পর্কিত।
class M1(models.Model):
name = models.CharField(max_length=10)
class M2(models.Model):
name = models.CharField(max_length=10)
select_relation = models.ForeignKey(M1, on_delete=models.CASCADE)
prefetch_relation = models.ManyToManyField(to='M3')
class M3(models.Model):
name = models.CharField(max_length=10)
এখানে আপনি খোঁজ করতে পারেন M2মডেল এবং তার আপেক্ষিক M1বস্তু ব্যবহার select_relationক্ষেত্র ও M3ব্যবহার অবজেক্টের prefetch_relationক্ষেত্র।
তবে আমরা যেহেতু M1এর সম্পর্কের বিষয়টি উল্লেখ করেছি তা M2হ'ল ForeignKey, এটি যে কোনও বস্তুর জন্য কেবল 1 টি রেকর্ড দেয় M2। একই জিনিস OneToOneFieldপাশাপাশি প্রযোজ্য ।
কিন্তু M3's সম্পর্ক M2একটি হল ManyToManyFieldযা যে কোন সংখ্যার আসতে পারে M1অবজেক্ট।
আপনার 2 আছে এমন একটি ক্ষেত্রে বিবেচনা করুন M2 অবজেক্ট রয়েছে এমনm21 , m22যাদের আইডির সাথে একই 5 টি সম্পর্কিত বিষয় রয়েছে । আপনি যখন এই সমস্ত বস্তুর জন্য যুক্ত বস্তুগুলি আনয়ন করেন , আপনি যদি নির্বাচিত সম্পর্কিত ব্যবহার করেন, এটি এভাবে কাজ করবে।M31,2,3,4,5M3M2
পদক্ষেপ:
- এই
m21বস্তু।
- যার আইডি হ'ল
M3বস্তুর সাথে সম্পর্কিত সমস্ত বস্তুর অনুসন্ধান করুন ।m211,2,3,4,5
m22বস্তু এবং অন্যান্য সমস্ত বস্তুর জন্য একই জিনিস পুনরাবৃত্তি করুন M2।
আমাদের যেমন আছে 1,2,3,4,5 উভয়ের জন্য আইডি রয়েছে m21, m22অবজেক্টস, আমরা যদি সিলেক্ট রিলেটেড অপশনটি ব্যবহার করি তবে এটি একই আইডি যা দু'বার আগেই প্রাপ্ত হয়েছিল তার জন্য দু'বার ডিবি জিজ্ঞাসা করবে।
পরিবর্তে আপনি যদি প্রিফট_ সম্পর্কিত ব্যবহার করেন, যখন আপনি M2বস্তুগুলি পাওয়ার চেষ্টা করবেন , এটি অনুসন্ধানের সময় আপনার আইডিকে ফিরে আসা সমস্ত আইডিগুলির একটি নোট তৈরি করবে (দ্রষ্টব্য: কেবল আইডি)M2 টেবিলের এবং সর্বশেষ পদক্ষেপ হিসাবে, জাজানো M3টেবিলে একটি প্রশ্ন তৈরি করতে চলেছে এমন আপনার M2আইটেমগুলি ফিরে এসেছে এমন সমস্ত আইডির সেট সহ । এবং তাদের সাথে M2ডেটাবেসের পরিবর্তে পাইথন ব্যবহার করে অবজেক্টে যোগ দিন ।
এইভাবে আপনি M3একবারে সমস্ত বস্তু অনুসন্ধান করছেন যা কার্যকারিতা উন্নত করে।