2009-05-06 16 views
51

में कोई फ़ील्ड जोड़ना मेरे पास कुछ उपयोगकर्ताओं के साथ एक छोटी सी वेबसाइट है और मैं अपने मॉडल (और इसलिए टेबल) में से एक फ़ील्ड जोड़ना चाहता हूं। समस्या यह है कि syncdb निश्चित रूप से नहीं होगा मौजूदा मॉडलों को स्पर्श करें और मैं यह समझने की कोशिश कर रहा हूं कि इस क्षेत्र को मॉडल/टेबल पर पूरी चीज़ को दोबारा बदलने के बिना कैसे जोड़ा जाए।किसी मौजूदा Django मॉडल

उदाहरण:

class Newspaper(models.Model): 
    name = models.CharField() 

class UserProfile(models.Model): 
    user = models.ForeignKey(user, unique=True) 
    reads = models.ManyToManyField(Newspaper) 

अब मैं उपयोगकर्ता प्रोफाइल को तोड़ने के बिना Newspaper मॉडल के लिए एक URL क्षेत्र (blank=True) जोड़ना चाहते हैं।

कोई विचार?

उत्तर

38

ऐसा करने के लिए कोई अंतर्निहित तरीका नहीं है। हालांकि कई तृतीय-पक्ष परियोजनाएं हैं जो आपके लिए यह कर सकती हैं। दो प्रमुख लोगों को South और django-evolution कहा जाता है, हालांकि कई अन्य भी हैं (जिनमें से एक मैं शामिल हूं, dmigrations)।

मैं निश्चित रूप से दक्षिण की सिफारिश करता हूं - इसमें वास्तव में बहुत सी साफ सुविधाएं हैं और वास्तव में अच्छी तरह से काम करती हैं।

+0

मुझे लगता है कि अपने डेटाबेस को स्वचालित रूप से बदलने में भी एक अच्छा विचार है, खासकर जब यह एक नया कॉलम या बाधा जोड़ने जैसे सरल संचालन है। रिश्ते डेटाबेस की मूल बातें, साथ ही साथ Django ORM के बारे में जानने का यह एक शानदार तरीका है। और एक बार जब आप जानते हैं कि यह बहुत आसान है। –

+4

क्या आप हमें बता सकते हैं कि कैसे? – holmeswatson

+1

और सालों बाद, दक्षिण अब Django कोर का हिस्सा है। –

18

आप का उपयोग कर अपने नए क्षेत्र के लिए एसक्यूएल हो रही कोशिश कर सकते:

manage.py sql appname 

कहाँ appname एप्लिकेशन के नाम है, जिसमें अपने अखबार वर्ग जीवन है।

फिर, आप ALTER TABLE का उपयोग कर अपने appname_newspaper तालिका में मैन्युअल रूप से फ़ील्ड जोड़ सकते हैं। मैं Django के साथ सीधे ऐसा करने के तरीके से अवगत नहीं हूं, क्योंकि Django माइग्रेशन का समर्थन नहीं करता है।

+0

एक छोटा सा टिप्पणी: यदि आप यह तरीका अपनाते हैं, मैं अपने Django आवेदन में माइग्रेशन (स्तंभ के प्रारंभिक मान में भरने) प्रदर्शन की सिफारिश , केवल अनियमित मूल्यों की तलाश करके और इसे उड़ान भरने के द्वारा। कैशिंग के साथ मुद्दों में चल रहे एक अलग अनुप्रयोग जोखिम से उन्हें भरने की कोशिश कर रहा है। –

1

2015 जवाब:

भागो निम्नलिखित:

python manage.py makemigrations 
python manage.py migrate 
संबंधित मुद्दे