2016-08-22 62 views
0

嘿,我試圖初始化一個新的數據庫,但我遇到了一些問題設置遷移。我收到的錯誤似乎源於設置我的表單。在一個形式,我使用,我創建了一個選擇字段像這樣:Django關係錯誤,當運行使遷移

from django import forms 
from ..custom_admin import widgets, choices 


class MemberForm(forms.Form): 
    provinces = forms.ChoiceField(label='Provinces', choices=choices.PROVINCE_CHOICES, required=True) 

其中PROVINCE_CHOICES來自這裏:

from ..base.models import ProvinceCode 

PROVINCE_CHOICES = [] 
for province in ProvinceCode.objects.filter(country_code_id=1).order_by('code'): 
    PROVINCE_CHOICES.append((province.code, province.code)) 

這個問題似乎是,這個循環被在遷移之前調用發生,給我一個錯誤,說明省模型不存在。然而,評論對這個文件的引用允許遷移工作,這似乎是繼續使用不切實際的解決方案。有沒有辦法解決這個錯誤?

僅供參考,這裏是我的錯誤,當我運行manage.py makemigrations

./manage.py makemigrations   
Traceback (most recent call last): 
    File "/Users/js/Documents/VirtualEnvironments/pcenv/lib/python3.5/site-packages/django/db/backends/utils.py", line 64, in execute 
    return self.cursor.execute(sql, params) 
psycopg2.ProgrammingError: relation "pc_psr_code" does not exist 
LINE 1: ...escription", "pc_psr_code"."country_code_id" FROM "pc_psr_co... 
                  ^


The above exception was the direct cause of the following exception: 

Traceback (most recent call last): 
    File "./manage.py", line 9, in <module> 
    django.setup() 
    File "/Users/js/Documents/VirtualEnvironments/pcenv/lib/python3.5/site-packages/django/__init__.py", line 18, in setup 
    apps.populate(settings.INSTALLED_APPS) 
    File "/Users/js/Documents/VirtualEnvironments/pcenv/lib/python3.5/site-packages/django/apps/registry.py", line 115, in populate 
    app_config.ready() 
    File "/Users/js/Documents/VirtualEnvironments/pcenv/lib/python3.5/site-packages/debug_toolbar/apps.py", line 15, in ready 
    dt_settings.patch_all() 
    File "/Users/js/Documents/VirtualEnvironments/pcenv/lib/python3.5/site-packages/debug_toolbar/settings.py", line 228, in patch_all 
    patch_root_urlconf() 
    File "/Users/js/Documents/VirtualEnvironments/pcenv/lib/python3.5/site-packages/debug_toolbar/settings.py", line 216, in patch_root_urlconf 
    reverse('djdt:render_panel') 
    File "/Users/js/Documents/VirtualEnvironments/pcenv/lib/python3.5/site-packages/django/core/urlresolvers.py", line 568, in reverse 
    app_list = resolver.app_dict[ns] 
    File "/Users/js/Documents/VirtualEnvironments/pcenv/lib/python3.5/site-packages/django/core/urlresolvers.py", line 360, in app_dict 
    self._populate() 
    File "/Users/js/Documents/VirtualEnvironments/pcenv/lib/python3.5/site-packages/django/core/urlresolvers.py", line 293, in _populate 
    for pattern in reversed(self.url_patterns): 
    File "/Users/js/Documents/VirtualEnvironments/pcenv/lib/python3.5/site-packages/django/utils/functional.py", line 33, in __get__ 
    res = instance.__dict__[self.name] = self.func(instance) 
    File "/Users/js/Documents/VirtualEnvironments/pcenv/lib/python3.5/site-packages/django/core/urlresolvers.py", line 417, in url_patterns 
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module) 
    File "/Users/js/Documents/VirtualEnvironments/pcenv/lib/python3.5/site-packages/django/utils/functional.py", line 33, in __get__ 
    res = instance.__dict__[self.name] = self.func(instance) 
    File "/Users/js/Documents/VirtualEnvironments/pcenv/lib/python3.5/site-packages/django/core/urlresolvers.py", line 410, in urlconf_module 
    return import_module(self.urlconf_name) 
    File "/Users/js/Documents/VirtualEnvironments/pcenv/lib/python3.5/importlib/__init__.py", line 126, in import_module 
    return _bootstrap._gcd_import(name[level:], package, level) 
    File "<frozen importlib._bootstrap>", line 986, in _gcd_import 
    File "<frozen importlib._bootstrap>", line 969, in _find_and_load 
    File "<frozen importlib._bootstrap>", line 958, in _find_and_load_unlocked 
    File "<frozen importlib._bootstrap>", line 673, in _load_unlocked 
    File "<frozen importlib._bootstrap_external>", line 662, in exec_module 
    File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed 
    File "/Users/js/Documents/app/platform/test/pc/urls.py", line 7, in <module> 
    from .custom_admin import urls as custom_urls 
    File "/Users/js/Documents/app/platform/test/pc/custom_admin/urls.py", line 3, in <module> 
    from ..party import views as party_views 
    File "/Users/js/Documents/app/platform/test/pc/party/views.py", line 1, in <module> 
    from ..party import forms 
    File "/Users/js/Documents/app/platform/test/pc/party/forms.py", line 2, in <module> 
    from ..custom_admin import widgets, choices 
    File "/Users/js/Documents/app/platform/test/pc/custom_admin/choices.py", line 9, in <module> 
    for province in ProvinceCode.objects.filter(country_code_id=1).order_by('code'): 
    File "/Users/js/Documents/VirtualEnvironments/pcenv/lib/python3.5/site-packages/django/db/models/query.py", line 258, in __iter__ 
    self._fetch_all() 
    File "/Users/js/Documents/VirtualEnvironments/pcenv/lib/python3.5/site-packages/django/db/models/query.py", line 1074, in _fetch_all 
    self._result_cache = list(self.iterator()) 
    File "/Users/js/Documents/VirtualEnvironments/pcenv/lib/python3.5/site-packages/django/db/models/query.py", line 52, in __iter__ 
    results = compiler.execute_sql() 
    File "/Users/js/Documents/VirtualEnvironments/pcenv/lib/python3.5/site-packages/django/db/models/sql/compiler.py", line 848, in execute_sql 
    cursor.execute(sql, params) 
    File "/Users/js/Documents/VirtualEnvironments/pcenv/lib/python3.5/site-packages/django/db/backends/utils.py", line 79, in execute 
    return super(CursorDebugWrapper, self).execute(sql, params) 
    File "/Users/js/Documents/VirtualEnvironments/pcenv/lib/python3.5/site-packages/django/db/backends/utils.py", line 64, in execute 
    return self.cursor.execute(sql, params) 
    File "/Users/js/Documents/VirtualEnvironments/pcenv/lib/python3.5/site-packages/django/db/utils.py", line 95, in __exit__ 
    six.reraise(dj_exc_type, dj_exc_value, traceback) 
    File "/Users/js/Documents/VirtualEnvironments/pcenv/lib/python3.5/site-packages/django/utils/six.py", line 685, in reraise 
    raise value.with_traceback(tb) 
    File "/Users/js/Documents/VirtualEnvironments/pcenv/lib/python3.5/site-packages/django/db/backends/utils.py", line 64, in execute 
    return self.cursor.execute(sql, params) 
django.db.utils.ProgrammingError: relation "pc_psr_code" does not exist 
LINE 1: ...escription", "pc_psr_code"."country_code_id" FROM "pc_psr_co... 

省型號:

class ProvinceCode(models.Model): 
    code = models.CharField(blank=False, null=False, unique=True) 
    country_code = models.ForeignKey('CountryCode', blank=False, null=True) 
+0

你能告訴你的models.py,專門爲關聯到makemigrations試圖改變表的模式? –

+0

它不試圖改變模型,我正在初始化一個新的數據庫,所以沒有預先存在數據庫中。但我也會發布該模型 – Written

+0

好的。在這裏覆蓋所有的基礎,你的BaseCodeModel繼承自django.db模型。模型對嗎?由於在理論上,如果這是數據庫的初始創建,我不明白爲什麼在創建任何查詢時會出現「FROM」關鍵字,所以我只是對被拋出的錯誤感到困惑。有理由認爲只有「創建表」電話纔是正確的?有沒有一種方法可以得到一個比這個小的代碼片段更詳細的錯誤manage.py正在向你投擲? –

回答

5

應用註冊表的初始化過程中不能執行查詢。您的choices.py文件在此期間被間接導入,導致錯誤。要解決這個問題,你可以通過一個調用到choices

def get_provinces(): 
    province_choices = [] 
    for province in ProvinceCode.objects.filter(country_code_id=1).order_by('code'): 
     province_choices.append((province.code, province.code)) 
    return province_choices 

class MemberForm(forms.Form): 
    provinces = forms.ChoiceField(label='Provinces', choices=get_provinces, required=True) 
+0

get_provinces函數中是否存在返回值丟失? –

+1

@José是的,你是對的。謝謝。 – knbk