ошибка программирования базы данных django

#django #django-models

Вопрос:

Когда я пытаюсь сбросить базу данных (я создал новую пустую базу данных)

я получил эту ошибку, когда я запускаю эту команду python manage.py для миграции (или миграции)

     for pattern in self.url_patterns:
  File "djangoutilsfunctional.py", line 48, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "djangourlsresolvers.py", line 589, in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
  File "djangoutilsfunctional.py", line 48, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "djangourlsresolvers.py", line 582, in urlconf_module
    return import_module(self.urlconf_name)
  File pythonpython39libimportlib__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 790, in exec_module
  File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
  File "projecturls.py", line 18, in <module>
    path('api/v2/', include('project.api.urls'), name='api'),
  File "djangourlsconf.py", line 34, in include
    urlconf_module = import_module(urlconf_module)
  File "pythonpython39libimportlib__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 790, in exec_module
  File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
  File "projectapiurls.py", line 3, in <module>
    from .views import *
  File "projectapiviews.py", line 146, in <module>
    class SampleViewSet(viewsets.ModelViewSet):
  File "projectapiviews.py", line 148, in SampleViewSet
    general = General.objects.get(is_active=True)
  File "djangodbmodelsmanager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "djangodbmodelsquery.py", line 425, in get
    num = len(clone)
  File "djangodbmodelsquery.py", line 269, in __len__
    self._fetch_all()
  File "djangodbmodelsquery.py", line 1308, in _fetch_all
    self._result_cache = list(self._iterable_class(self))
  File "djangodbmodelsquery.py", line 53, in __iter__
    results = compiler.execute_sql(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size)
  File "djangodbmodelssqlcompiler.py", line 1156, in execute_sql
    cursor.execute(sql, params)
  File "djangodbbackendsutils.py", line 98, in execute
    return super().execute(sql, params)
  File "djangodbbackendsutils.py", line 66, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "djangodbbackendsutils.py", line 75, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "djangodbbackendsutils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
  File "envlibsite-packagesdjangodbutils.py", line 90, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "envlibsite-packagesdjangodbbackendsutils.py", line 84, in _execute
    return self.cursor.execute(sql, params)
        django.db.utils.ProgrammingError: HATA:  "app_general" object doesnt exist
    LINE 1: ...", "app_general"."field1" FROM "field_2...
 

views.py

 class SampleViewSet(viewsets.ModelViewSet):
    general = General.objects.get(is_active=True)
    queryset = model.objects.filter(field=site_general.field)
 

я удалил все файлы миграции во всех приложениях (без __init__ ), а также файлы .pyc

есть ли какая-нибудь идея для этой проблемы?

(отредактируйте, я добавил обратную трассировку)

Комментарии:

1. @AbdulAzizBarkat я отредактировал

2. @АбдулАзизБаркат class SampleViewSet(viewsets.ModelViewSet): general = General.objects.get(is_active=True) queryset = model.objects.filter(field=site_general.field)

3. @AbdulAzizBarkat я добавил

4. Что там site_general внутри model.objects.filter(field=site_general.field) ?

5. @АбдулАзизБаркат я не думаю views.py это вызовет проблемы, потому что я много раз менял базу данных, но теперь возникла проблема, и я не менял views.py и этот вид.

Ответ №1:

Все атрибуты класса, не относящиеся к методу, оцениваются /выполняются во время объявления или определения класса. Следовательно, когда интерпретатор достигает вашего класса SampleViewSet , он пытается выполнить строку general = General.objects.get(is_active=True) , но, конечно, ваша база данных еще не существует, и поскольку вызов .get подразумевает запрос к базе данных, вы получаете ошибку.

В общем случае любая инструкция, которая может вызвать запрос к базе данных, должна выполняться либо методом конфигурации приложения ready , либо каким-либо промежуточным программным обеспечением / контекстным процессором, либо представлением в запросе. Глядя на код, он не выглядит так, как будто вы general его где-либо используете, поэтому вы можете просто удалить его:

 class SampleViewSet(viewsets.ModelViewSet):
    queryset = model.objects.filter(field=site_general.field)
 

Вы могли model.objects.filter(...) бы сказать, что это также вызовет запрос, но .filter возвращаемые значения a QuerySet и queryset являются ленивыми и, следовательно, оцениваются только при необходимости, так что это не вызовет никаких ошибок.

Комментарии:

1. Я получил это в строке комментариев, и это сработало, но это был странный опыт. Спасибо за помощь