2012-12-24 17 views
8

मैंने एक मौजूदा मॉडल में कई से अधिक फ़ील्ड जोड़े और नई तालिका बनाने के लिए syncdb की अपेक्षा की थी, लेकिन वहां कुछ भी नहीं है। यह वही मॉडल लग रहा है की तरह है:Django - syncdb टेबल नहीं बनाता

class Author(models.Model): 
    first_name = models.CharField(max_length=50) 
    last_name = models.CharField(max_length=50) 
    email = models.EmailField() 

    def __unicode__(self): 
     return "{0} {1}".format(self.first_name, self.last_name) 

class Book(models.Model): 
    title = models.CharField(max_length=100) 
    authors = models.ManyToManyField(Author) 

    def __unicode__(self): 
     return self.title 

sql myapp प्रिंट नई तालिका के साथ सही बयान चल रहा है, लेकिन यह प्रतिबिंबित नहीं होता है जब मैं syncdb चलाते हैं। validate कोई त्रुटि नहीं देता है। क्या किसी को पता है कि यहां क्या मामला हो सकता है? या एक बेहतर निदान?

उत्तर

15

सिंकडीबी कमांड डिज़ाइन द्वारा मौजूदा मॉडल के लिए कई तालिकाओं में कई नहीं बनाता है। यह निर्णय ticket 2229 पर समझाया गया है।

इससे आपको कुछ विकल्प मिलते हैं।

  • यदि आपके बुक मॉडल में कोई डेटा नहीं है, तो तालिका ड्रॉप करें और सिंकडब को दोबारा शुरू करें। Django पुस्तक तालिका और कई कई टेबल को फिर से बनाया जाएगा।
  • dbshell कमांड का उपयोग करें, और एसक्यूएल मैप के आउटपुट का उपयोग करके कई शामिल टेबल में कई बनाएं।
  • यदि आप Django के साथ कई स्कीमा माइग्रेशन कर रहे हैं, तो South के साथ मित्र बनाएं। SchemaEvolution:
5

मैं Django उपयोगी डॉक्स पर इस स्पष्टीकरण मिल गया।

डेटाबेस माइग्रेशन के लिए वास्तविक तथ्य डीजेगो साउथ है।

यह सही नहीं है, लेकिन, यह बहुत अच्छी तरह से काम करता है। इसे चलाने से पहले आपको हमेशा माइग्रेशन फ़ाइल को जांचना चाहिए (और यदि आवश्यक हो तो संपादित करें), यह सुनिश्चित करने के लिए कि यह वास्तव में ऐसा करता है जो इसे करना है। आप अपने ट्यूटोरियल here देख सकते हैं।

इसके अलावा, अगर आप चलाएँ:

python manage.py inspectdb > somefile.txt 

आप जल्दी से बाहर करता है, तो अपने डेटाबेस संरचना अपने Django मॉडल से मेल खाते है की जाँच कर सकते हैं।

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