Skip to main content
 首页 » 编程设计

python之运行 make migrations 时出现 Django 关系错误

2025年05月04日26TianFang

嘿,我正在尝试初始化一个新数据库,但在设置迁移时遇到了一些问题。我得到的错误似乎源于设置我的表格。在我使用的表单中,我正在创建一个选择字段:

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

问题似乎是在迁移发生之前调用了这个循环,给我一个错误,指出 Province 模型不存在。注释掉对该文件的引用允许迁移工作,但是,这似乎是继续使用的不切实际的解决方案。有办法解决这个错误吗?

作为引用,这是我在运行 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) 

请您参考如下方法:

您不能在应用注册表初始化期间执行查询。您的 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)