2016-03-29 16 views
6

migrations का उपयोग करके, मुझे मॉडल में एक नया फ़ील्ड (एक विदेशी कुंजी) जोड़ने की आवश्यकता है। मुझे पता है कि इसके साथ किया जा सकता है:Django माइग्रेशन में विदेशी कुंजी के लिए डिफ़ॉल्ट मान। एडफिल्ड

migrations.AddField(
     model_name='MyModel', 
     name='state', 
     field=models.ForeignKey(null=True, related_name='mymodel_state', to='msqa_common.MyModelState'), 
    ), 

हालांकि, मैं नहीं चाहता कि मेरा क्षेत्र शून्य हो। इसके बजाय, मैं इसके लिए एक डिफ़ॉल्ट मान का उपयोग करना चाहता हूं, MyModelState की आईडी के अनुरूप जिसका नाम "उपलब्ध" है (आईडी मान अलग-अलग मशीनों में बदल सकता है)। तालिका का यह "उपलब्ध" मान MyModelState को पिछले माइग्रेशन स्क्रिप्ट में डेटाबेस में डाला गया है, इसलिए यह अस्तित्व में है।

मुझे लगता है मैं कुछ ऐसा करना चाहिए:

migrations.AddField(
     model_name='MyModel', 
     name='state', 
     field=models.ForeignKey(null=False, default=available_state_id, related_name='mymodel_state', to='msqa_common.MyModelState'), 
    ), 

मेरा प्रश्न: मैं अपने प्रवास स्क्रिप्ट के भीतर available_state_id कैसे मिल सकता है?

उत्तर

16

आप इसे सीधे नहीं कर सकते हैं। ऐसा करने का अनुशंसित तरीका यह है कि इसे null = True के साथ जोड़ने के लिए माइग्रेशन बनाना है, फिर डेटा माइग्रेशन जोड़ें जो सभी मौजूदा अपडेट को available_state_id पर इंगित करने के लिए पाइथन या एसक्यूएल का उपयोग करता है, फिर एक तीसरा माइग्रेशन जो इसे शून्य में बदलता है = झूठी।

+0

धन्यवाद डैनियल। क्या आपको कोई दस्तावेज पता है जहां इस प्रक्रिया को समझाया गया है? – eelioss

+2

https://docs.djangoproject.com/en/1.9/howto/writing-migrations/#migrations-that-add-unique-fields –

संबंधित मुद्दे