0

Привет, Я пытаюсь инициализировать новую базу данных, но у меня возникают проблемы с настройкой миграции. Ошибка, которую я получаю, по-видимому, связана с настройкой моих форм. В форме я использую, я создаю поле выбора, как так:Ошибка отношения Django при работе make migrations

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... 

Province модель:

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» было бы в любых создаваемых запросах. Было бы резонно рассуждать о том, что вызовы «create table» будут только правильно? Есть ли способ получить более подробную ошибку, чем небольшой сниппет 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

@ Хосе. Да, ты прав. Благодарю. – knbk

 Смежные вопросы

  • Нет связанных вопросов^_^