ইতিমধ্যে পোস্ট করা উত্তরগুলি দিয়ে গেছে। কেবল ভেবেছিলাম যদি আমি প্রকৃত উদাহরণ সহ একটি উত্তর যুক্ত করি তবে এটি আরও ভাল হবে।
যাক 'আপনার কাছে 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 টি সম্পর্কিত বিষয় রয়েছে । আপনি যখন এই সমস্ত বস্তুর জন্য যুক্ত বস্তুগুলি আনয়ন করেন , আপনি যদি নির্বাচিত সম্পর্কিত ব্যবহার করেন, এটি এভাবে কাজ করবে।M3
1,2,3,4,5
M3
M2
পদক্ষেপ:
- এই
m21
বস্তু।
- যার আইডি হ'ল
M3
বস্তুর সাথে সম্পর্কিত সমস্ত বস্তুর অনুসন্ধান করুন ।m21
1,2,3,4,5
m22
বস্তু এবং অন্যান্য সমস্ত বস্তুর জন্য একই জিনিস পুনরাবৃত্তি করুন M2
।
আমাদের যেমন আছে 1,2,3,4,5
উভয়ের জন্য আইডি রয়েছে m21
, m22
অবজেক্টস, আমরা যদি সিলেক্ট রিলেটেড অপশনটি ব্যবহার করি তবে এটি একই আইডি যা দু'বার আগেই প্রাপ্ত হয়েছিল তার জন্য দু'বার ডিবি জিজ্ঞাসা করবে।
পরিবর্তে আপনি যদি প্রিফট_ সম্পর্কিত ব্যবহার করেন, যখন আপনি M2
বস্তুগুলি পাওয়ার চেষ্টা করবেন , এটি অনুসন্ধানের সময় আপনার আইডিকে ফিরে আসা সমস্ত আইডিগুলির একটি নোট তৈরি করবে (দ্রষ্টব্য: কেবল আইডি)M2
টেবিলের এবং সর্বশেষ পদক্ষেপ হিসাবে, জাজানো M3
টেবিলে একটি প্রশ্ন তৈরি করতে চলেছে এমন আপনার M2
আইটেমগুলি ফিরে এসেছে এমন সমস্ত আইডির সেট সহ । এবং তাদের সাথে M2
ডেটাবেসের পরিবর্তে পাইথন ব্যবহার করে অবজেক্টে যোগ দিন ।
এইভাবে আপনি M3
একবারে সমস্ত বস্তু অনুসন্ধান করছেন যা কার্যকারিতা উন্নত করে।