জাঙ্গো: পূর্ণসংখ্যা ব্যবহার করে বিদেশী কী সেট করবেন?


104

কোনও মডেলের পূর্ণসংখ্যা আইডি ব্যবহার করে কী কী বিদেশী কী সম্পর্ক স্থাপনের উপায় রয়েছে? এটি অপ্টিমাইজেশনের উদ্দেশ্যে হবে।

উদাহরণস্বরূপ, ধরুন আমার কাছে একজন কর্মী মডেল রয়েছে:

class Employee(models.Model):
  first_name = models.CharField(max_length=100)
  last_name = models.CharField(max_length=100)
  type = models.ForeignKey('EmployeeType')

এবং

EmployeeType(models.Model):
  type = models.CharField(max_length=100)

আমি সীমাহীন কর্মচারী প্রকারের নমনীয়তা চাই, তবে মোতায়েন অ্যাপ্লিকেশনটিতে সম্ভবত একটি একক প্রকার থাকবে তাই আমি ভাবছি যে এইভাবে আইডিকে হার্ডকোড করার উপায় আছে এবং সম্পর্কটি এইভাবে সেট করা আছে কিনা। এমপ্লয় টাইপ অবজেক্টটি পাওয়ার জন্য আমি এইভাবে কোনও ডিবি কল এড়াতে পারি।

উত্তর:


205

হাঁ:

employee = Employee(first_name="Name", last_name="Name")
employee.type_id = 4
employee.save()

ForeignKeyক্ষেত্রগুলি _idশেষে একটি বৈশিষ্ট্যের সাথে তাদের মান সংরক্ষণ করে , যা আপনি ডাটাবেস পরিদর্শন এড়াতে সরাসরি অ্যাক্সেস করতে পারেন।

এর _idসংস্করণটি ForeignKeyজ্যাঙ্গোর একটি বিশেষ উপকারী দিক, এটি যথাযথ সময়ে সময়ে সময়ে প্রত্যেকের জানা উচিত এবং ব্যবহার করা উচিত।

সতর্কীকরণ:

@ রুনকাগার্ড পয়েন্টটি দেওয়ার employee.typeপরেও সাম্প্রতিক জ্যাঙ্গো সংস্করণগুলিতে এটি সঠিক নয় বলে উল্লেখ করেছেন employee.save()(এটির এটির পুরানো মূল্য রয়েছে)। এটি ব্যবহার করা অবশ্যই অবশ্যই উপরের অপ্টিমাইজেশনের উদ্দেশ্যকে পরাভূত করবে, তবে আমি ভুল হওয়ার চেয়ে দুর্ঘটনাজনিত অতিরিক্ত কোয়েরি পছন্দ করব। সুতরাং সাবধানতা অবলম্বন করুন, কেবলমাত্র এটি ব্যবহার করুন যখন আপনি আপনার উদাহরণে কাজ শেষ করেন (যেমন employee) eg


10
এটি কি নথিভুক্ত?
স্কট স্টাফোর্ড

8
বিদেশী মূল মানগুলি সরাসরি ব্যবহার করা হচ্ছে: ডকস.ডজ্যাঙ্গোপ্রজেক্ট
ড্যান

1
আমি আজ জাঙ্গো ১.7 এ এটি পরীক্ষা করেছি এবং এটি সেখানে ভাল ধারণা নয়। এটি কাজ করার সময় এবং typeক্ষেত্রটি ডাটাবেজে লিখিত হয়ে যায়, আপনি যদি typeপরে সম্পত্তিটিতে অ্যাক্সেস করেন তবে এটি পরিবর্তনটি প্রতিফলিত করে না। কোড বলেছেন, এটি ব্যর্থ হবে assert(employe.type.id == 4)
রুন কাগার্ড

3
@ আমাইচাইগ্রাইবার আমি বিশ্বাস করি জ্যাঙ্গোর পরবর্তী প্রকাশে এই সমস্যার সমাধান হবে: কোড.ডজ্যাঙ্গোপ্রজেক্ট
হার্ডি

2
ভবিষ্যতে যে কেউ এখানে আসার জন্য, এই সমস্যাটি জ্যাঙ্গো ২.১ এ স্থির করা হয়েছে ।
হামক্যাট

45

একটি বিকল্প যা তৈরি করতে একটি বস্তু তৈরি করতে এবং এটি একটি লাইনে ডাটাবেসে সংরক্ষণ করতে ব্যবহার করে:

employee = Employee.objects.create(first_name='first', last_name='last', type_id=4)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.