জ্যাঙ্গো স্ব-রেফারেন্সিয়াল বিদেশী কী


165

আমি সাধারণভাবে ওয়েব অ্যাপস এবং ডেটাবেস স্টাফগুলিতে একদম নতুন তাই এটি বোবা প্রশ্ন হতে পারে। আমি এমন একটি ক্ষেত্র দিয়ে একটি মডেল ("বিভাগমোডেল") তৈরি করতে চাই যা মডেলের অন্য উদাহরণের (তার পিতামাতার) আইডিকে নির্দেশ করে to

class CategoryModel(models.Model):
    parent = models.ForeignKey(CategoryModel)

আমি এটা কিভাবে করবো? ধন্যবাদ!


2
স্টাইলিস্টিকভাবে, আমি parentপরিবর্তে এটি কল করার পরামর্শ দিচ্ছি parentId, যেহেতু my_category_model.parentএটির উদাহরণ হবে CategoryModel। জ্যাঙ্গো স্বয়ংক্রিয়ভাবে একটি সদস্য তৈরি করবে parent_idযা সম্পর্কিত মডেলের প্রাথমিক কী হবে।
ফ্লো

উত্তর:


262

আপনি কোনও মডেলের নামে স্ট্রিং হিসাবে ফরেনকেতে যেতে পারেন এবং এটি সঠিক কাজ করবে।

তাই:

parent = models.ForeignKey("CategoryModel")

অথবা আপনি স্ট্রিং "স্ব" ব্যবহার করতে পারেন

parent = models.ForeignKey("self")

55

স্ব-রেফারেন্স নির্দেশ করতে আপনি স্ট্রিং 'স্ব' ব্যবহার করতে পারেন।

class CategoryModel(models.Model):
    parent = models.ForeignKey('self')

https://docs.djangoproject.com/en/dev/ref/models/fields/#foreignkey


7
আমি মনে করি আপনি 'স্ব' অর্থ। স্ট্রিং হিসাবে। স্ব এ প্রসঙ্গে
স্বাচ্ছন্দিত

1
@ ব্র্যান্ডন আপনার উত্তরটিতে 'স্ব' কীভাবে তার মন্তব্যে জারেড বলেছে তার চেয়ে আলাদা? "আমি মনে করি আপনি" স্ব "অর্থ !!! । উভয় স্ট্রিং যা জ্যাঙ্গো ডক্স অনুসারে ভাল। ! কোনও ইঙ্গিত
স্ট্রাইকার

1
পার্থক্যটি হ'ল selfমডেল সম্পত্তি সংজ্ঞা দেওয়ার সময় উপস্থিত হয় না। সম্পত্তিটি যদি __init__()অন্য কোনও পদ্ধতির অংশ হিসাবে সংজ্ঞায়িত করা হত তবে এটি হবে, selfপাইথন শ্রেণির কোনও উদাহরণ পদ্ধতির সর্বদা প্রথম অবস্থানগত যুক্তি।
ব্র্যান্ডন 12


1

আপনি নাল স্থির করতে হবে = সত্য এবং ফাঁকা = সত্য

class CategoryModel(models.Model):
    parent = models.ForeignKey("self", on_delete=models.CASCADE, null=True, blank=True)

নাল = সত্য, ডাটাবেসে
ফাঁকা = সত্য, ফর্ম বৈধকরণের অনুমতি দেওয়ার জন্য

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.