Django में सिर्फ बनाए गए रिकॉर्ड की आईडी कैसे प्राप्त करें?


82

मैं अपने एक प्रोजेक्ट के लिए Django 1.3 का उपयोग कर रहा हूं और मुझे डेटाबेस में सहेजे गए रिकॉर्ड की आईडी प्राप्त करने की आवश्यकता है।

डेटाबेस में रिकॉर्ड को बचाने के लिए मेरे पास कोड जैसा कुछ है:

n = MyData.objects.create(record_title=title, record_content=content)
n.save()

रिकॉर्ड की आईडी ने बस ऑटो-वेतन वृद्धि को बचाया। क्या उस आईडी को प्राप्त करने और मेरे कोड में कहीं और उपयोग करने का कोई तरीका है?


13
यहां लाइन n.save()अनावश्यक है, क्योंकि MyData.objects.createस्वचालित रूप से नई आवृत्ति सहेजती है।
डैनियल रोजमैन

मेरे उत्तर stackoverflow.com/a/25807622/3762142 को html पृष्ठ में आपको आईडी मिल जाएगी ..
राजा साइमन

जवाबों:


119

n.idसेव के बाद उपयोग करें ।

" ऑटो-इंक्रीमेंटिंग प्राथमिक कुंजी " देखें।


2
जब मैं डेटा को व्यू में फ़ॉर्म का उपयोग करके सहेजता हूं तो आईडी का उपयोग कैसे करें जो कि सिर्फ ऑब्जेक्ट से बचाता है?
नीरज कुमार

2
यह तब से होना चाहिए n.pkक्योंकि यह केवल आईडी होगा यदि आपने खुद एक प्राथमिक कुंजी नहीं जोड़ी है, या एक को जोड़ा और इसे आईडी नाम दिया है।
जोएल जी मैथ्यू

@JamesO इस आईडी को मॉडल उदाहरण के रूप में कैसे प्राप्त करें या हल करें।
जीत पटेल

54

यह होगा n.pk

" Model.pk " को उद्धृत करने के लिए :

भले ही आप स्वयं एक प्राथमिक कुंजी क्षेत्र को परिभाषित करें, या Django को आपके लिए एक आपूर्ति करने दें, प्रत्येक मॉडल में एक संपत्ति होगी जिसे pk कहा जाता है। यह मॉडल पर एक सामान्य विशेषता की तरह व्यवहार करता है, लेकिन वास्तव में जो भी विशेषता के लिए एक उपनाम मॉडल के लिए प्राथमिक कुंजी क्षेत्र है। आप इस मान को पढ़ सकते हैं और सेट कर सकते हैं, जैसे आप किसी अन्य विशेषता के लिए करेंगे, और यह मॉडल में सही फ़ील्ड को अपडेट करेगा।


4
अच्छा मिल गया। यह इंगित करता है कि कॉलिंग .pkको संभवतः "सर्वश्रेष्ठ अभ्यास" माना जाता है क्योंकि यह डिफ़ॉल्ट आईडी या कस्टम आईडी का संदर्भ देता है।
j_syk

उपरोक्त लिंक django के इन-देव संस्करण में जाता है। v 1.7-v1.10 एक ही बात कहता है, हालांकि: docs.djangoproject.com/en/1.10/ref/models/instances/… v1.7 से पहले निश्चित नहीं है
कीथ

7

आईडी स्वचालित रूप से आपके मॉडल में अपडेट हो जाएगी, इसलिए आपकी n.save()लाइन के तुरंत बाद आप पढ़ सकते हैं n.idऔर यह आबाद हो जाएगा।


सफलता के बिना इस कोशिश कर रहा है: stackoverflow.com/questions/61160852/...
डैनियल डब्ल्यू


1

आईडी एक्सेस करने के साथ मेरे पास एक समान मुद्दा था। Django 3.0.5 में, इस तरह से मैंने आईडी को एक्सेस किया। अपने उदाहरण और चर नाम का उपयोग करते हुए, नीचे देखें:

instance = n.save()
# return the id
instance[0].id 

उपरोक्त चर 'उदाहरण' एक सूची है। Django 3 में उपर्युक्त विधियों में आईडी एक्सेस करना एक एट्रीब्यूट ("ऑब्जेक्ट में कोई विशेषता 'आईडी' नहीं है) देता है।

उपयोग करते समय यह उत्तर लागू होता है modelformset_factory। यह एक सच है जब Django मॉडल से एक फॉर्म क्लास बनाते हैं जैसा कि Django डॉक्स में वर्णित है


0

यदि कोई व्यक्ति इस प्रश्न को पढ़ता है तो बाकी के उत्तर आपको अभी भी ऑब्जेक्ट के निर्माण के बाद आईडी तक पहुंचने में समस्या होती है। सुनिश्चित करें कि आप idअपने मॉडल में पूर्णांक के रूप में परिभाषित नहीं करते हैं । यह Django में मुफ्त में है, इसलिए आप आईडी या उपयोग नहीं लिख सकतेAutofield

#No
class TestModel(models.Model):
    id = models.IntegerField(primary_key=True)
    something...


#Ok
class TestModel(models.Model):
    id = models.AutoField(primary_key=True)
    something...

#Ok
class TestModel(models.Model):
    something...

यदि आप idपूर्णांक के रूप में परिभाषित करते हैं , TestModel.objects.create(या save()कोई भी नहीं लौटेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.