2015-11-12 13 views
13

अजगर 3, Django 1.8.5, PostgresDjango प्रवासन त्रुटि: स्तंभ मौजूद नहीं है

मैं एक मॉडल Sites कि ठीक काम कर रहा है है। मैंने हाल ही में एक फ़ील्ड, airport_code जोड़ने और डेटा माइग्रेट करने का प्रयास किया।

django.db.utils.ProgrammingError: column sites_site.airport_code does not exist LINE 1: ..._site"."sitemap_public_id", "sites_site"."state", "sites_sit...

बेशक

, इस, मतलब नहीं है क्योंकि स्तंभ जाहिर है जब मैं कोशिश कर रहा हूँ मौजूद नहीं है:

class Site(BaseModel): 

    objects = SiteManager() 

    name = models.CharField(max_length=200, unique=True) 
    domain = models.CharField(max_length=200, unique=True) 
    weather = models.CharField(max_length=10) 
    nearby_sites = models.ManyToManyField('self', symmetrical=False, blank=True) 
    users = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True) 
    facebook = models.URLField(max_length=200) 
    twitter = models.URLField(max_length=200) 
    header_override = models.TextField(blank=True) 
    email_header_override = models.TextField(blank=True) 
    timely_site_tag_id = models.IntegerField() 
    timely_featured_tag_id = models.IntegerField() 
    timely_domain = models.CharField(max_length=255) 
    sitemap_public_id = models.CharField(max_length=255) 
    state = models.CharField(max_length=24) 
    airport_code = JSONField() 

हालांकि, जब मैं makemigrations भाग गया मैं एक त्रुटि मिली माइग्रेशन के भीतर इसे बनाओ।

मैंने इस बग के बारे में कई प्रश्नों को देखा है जो अनुत्तरित हैं, या मैन्युअल रूप से माइग्रेशन फ़ाइल बनाने, या डेटाबेस को नष्ट करने और पुनर्निर्माण करने का समाधान है। यह ठीक समाधान नहीं है।

उत्तर

6

सेटिंग बग में INSTALLED_APPS से django डीबग टूलबार पर टिप्पणी करके यह बग मेरे लिए हल किया गया था। मुझे यकीन नहीं है कि डीबग टूलबार अपराधी क्यों है, लेकिन जब मैंने इसे टिप्पणी की, तो मैं makemigrations और migrate को बिना किसी समस्या के चलाने में सक्षम था।

उम्मीद है कि यह किसी की मदद करता है, क्योंकि मैंने बारह घंटे बिताए इसे समझने की कोशिश की।

+4

यह भी मेरे लिए क्या हो रहा है, लेकिन दुर्भाग्य से, मैं Django टूलबार का उपयोग नहीं कर रहा हूँ। सुनिश्चित नहीं है कि कैसे आगे बढ़ें ... –

+0

Django टूलबार ने भी मेरे लिए काम किया। मेरा डेटाबेस SQLite है। – JimInCO

6

makemigrations चलाने के बाद, चरण-दर-चरण स्टैक ट्रेस चरण से गुजरना सुनिश्चित करें।

मेरे मामले में, मैंने देखा कि यह एक पूरी तरह से अलग ऐप में form.py के भीतर निहित फॉर्म में एक कॉल के माध्यम से पता लगाया गया था, जिसके लिए मॉडल के लिए एक कॉल आया था जिसके लिए मैं एक नया माइग्रेशन बनाने की कोशिश कर रहा था।

form.py में form.py से फॉर्म क्लास को निकालकर.py.py ने समस्या को हल किया।

-1

मेरे पोस्टग्रेज़ डेटाबेस के माइग्रेशन के बाद एक भिन्न सर्वर पर माइग्रेशन के बाद इस समस्या को चलाएं। किसी भी तरह से मैंने डेटाबेस को गड़बड़ कर दिया और नए मॉडल UserProfile के साथ अपना मॉडल अपडेट नहीं कर सका।

  1. खाली django_migrations तालिका:

    मैं मौजूदा स्कीमा के लिए आरंभिक माइग्रेशन बनाने समस्या हल एक कमांड DELETE FROM django_migrations WHERE app='my_app';

  2. हर अनुप्रयोग के लिए साथ delete from django_migrations;, अपने migrations फ़ोल्डर को हटाएँ: rm -rf <app>/migrations/
  3. माइग्रेशन रीसेट "अंतर्निर्मित" ऐप्स के लिए: python manage.py migrate --fake
  4. प्रत्येक ऐप चलाने के लिए: python manage.py makemigrations <app>। निर्भरताओं का ख्याल रखना (विदेशी के साथ मॉडल अपने मूल मॉडल के बाद चलाना चाहिए)।
  5. अंत: python manage.py migrate --fake-initial

इसे यहाँ मिल गया: https://stackoverflow.com/a/29898483

पुनश्च मुझे यकीन है कि इस समस्या के समाधान के लिए प्रासंगिक था, लेकिन, पहले नहीं कर रहा हूँ, मैं PostgreSQL में मेज है कि एक कारण होता है गिरा मॉडल में UserProfile क्लास में त्रुटि और टिप्पणी की।

खोल में

:

sudo -su postgres 
psql databse_name 
DROP TABLE table_name; 

models.py:

#class UserProfile(models.Model): 
    #user = models.OneToOneField(settings.AUTH_USER_MODEL, unique=True, primary_key=True, on_delete=models.CASCADE, related_name='user_profile') 
    #avatar = ThumbnailerImageField(upload_to='profile_images', blank=True) 
    #country = models.CharField(max_length = 128) 
संबंधित मुद्दे