2012-01-13 4 views
12

मेरे पास एक Django प्रोजेक्ट है जो विरासत डेटाबेस के आयात के रूप में शुरू हुआ। इस वजह से, एक समग्र प्राथमिक कुंजी वाला एक मॉडल है। यह तब तक काम करता था जब तक मैंने केवल विरासत डेटा का उपयोग नहीं किया था, लेकिन अब मैं नया डेटा जोड़ना चाहता हूं और मेरे द्वारा बनाए गए फॉर्म मुझे बता रहे हैं कि मैं डुप्लिकेट डेटा डालने की कोशिश कर रहा हूं, संभवतः क्योंकि यह केवल फ़ील्ड में से एक को देख रहा है प्राथमिक कुंजी।Django दक्षिण के साथ मौजूदा मॉडल में Autoincrement फ़ील्ड जोड़ना?

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

मैं कैसे निर्दिष्ट कर सकता हूं कि दक्षिण को किसी विशेष तरीके से अद्वितीय कुंजी असाइन करना चाहिए जो एक ऑटोइनक्रिकमेंट फ़ील्ड के लिए उचित है? (यानी अनुक्रम [1 ... n] रिकॉर्ड के कुछ मनमाने ढंग से क्रमबद्ध करने के लिए अनुक्रम [0 ... n] असाइन करें)

यदि यह असंभव है तो एक ही चीज़ को पूरा करने का एक और तरीका है, अधिमानतः डीजेगो और दक्षिण का उपयोग करना?

मैं INSERT INTO... SELECT... साथ एसक्यूएल में एक अस्थायी तालिका में मूल तालिका से डेटा की प्रतिलिपि:

उत्तर

5

मैं समस्या यह है कि मुझे आवश्यक एक समाधान के साथ ऐसा करने को हल किया। मैंने फिर मूल तालिका को हटा दिया और इसे ऑटोइनक्रिएटमेंट फ़ील्ड के साथ बनाया। फिर मैंने डेटा को वापस नई तालिका में कॉपी किया, ऑटोइनक्रिकमेंट मान INSERT कमांड द्वारा स्वचालित रूप से जोड़े गए। अंत में मैंने दक्षिण स्कीमा के साथ दक्षिण की तालिकाओं को सुसंगत बनाने के लिए दक्षिण प्रवासन के नकली भाग को निष्पादित किया।