Django makemigrations找不到表



我有一个Django应用程序,运行非常好。

我从Github下载了存储库到一台新的笔记本电脑上,但当我尝试运行时:

  • python manage.py makemigrations
  • runserver
  • etc

我得到django.db.utils.OperationalError: no such table: catalog_categorias_producto

已尝试:

  • 已删除db.sqlite3
  • 删除了所有迁移文件(__init__除外(
  • 再次尝试makemigrations

无差异。

有线索吗?谢谢

完整错误日志

Traceback (most recent call last):
File "C:UsersKinemedanaconda3envsanwenlibsite-packagesdjangodbbackendsutils.py", line 84, in _execute
return self.cursor.execute(sql, params)
File "C:UsersKinemedanaconda3envsanwenlibsite-packagesdjangodbbackendssqlite3base.py", line 383, in execute
return Database.Cursor.execute(self, query, params)
sqlite3.OperationalError: no such table: catalog_categorias_producto
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "manage.py", line 15, in <module>
execute_from_command_line(sys.argv)
File "C:UsersKinemedanaconda3envsanwenlibsite-packagesdjangocoremanagement__init__.py", line 381, in execute_from_command_line
utility.execute()
File "C:UsersKinemedanaconda3envsanwenlibsite-packagesdjangocoremanagement__init__.py", line 357, in execute
django.setup()
File "C:UsersKinemedanaconda3envsanwenlibsite-packagesdjango__init__.py", line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File "C:UsersKinemedanaconda3envsanwenlibsite-packagesdjangoappsregistry.py", line 122, in populate
app_config.ready()
File "C:UsersKinemedanaconda3envsanwenlibsite-packagesdjangocontribadminapps.py", line 24, in ready
self.module.autodiscover()
File "C:UsersKinemedanaconda3envsanwenlibsite-packagesdjangocontribadmin__init__.py", line 26, in autodiscover
autodiscover_modules('admin', register_to=site)
File "C:UsersKinemedanaconda3envsanwenlibsite-packagesdjangoutilsmodule_loading.py", line 47, in autodiscover_modules
import_module('%s.%s' % (app_config.name, module_to_search))
File "C:UsersKinemedanaconda3envsanwenlibimportlib__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 728, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "C:UsersKinemedkinemed-productionkinemed-productioncatalogadmin.py", line 5, in <module>
from catalog.forms import CambiarPreciosForm
File "C:UsersKinemedkinemed-productionkinemed-productioncatalogforms.py", line 83, in <module>
class FormularioOperaciones(forms.ModelForm):
File "C:UsersKinemedkinemed-productionkinemed-productioncatalogforms.py", line 94, in FormularioOperaciones
categorias = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple, choices=[(choice, choice) for choice in Categorias_Producto.objects.all().order_by().values_list('categoria_producto_ing', flat=True)], required=False)
File "C:UsersKinemedanaconda3envsanwenlibsite-packagesdjangodbmodelsquery.py", line 274, in __iter__
self._fetch_all()
File "C:UsersKinemedanaconda3envsanwenlibsite-packagesdjangodbmodelsquery.py", line 1242, in _fetch_all
self._result_cache = list(self._iterable_class(self))
File "C:UsersKinemedanaconda3envsanwenlibsite-packagesdjangodbmodelsquery.py", line 182, in __iter__
for row in compiler.results_iter(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size):
File "C:UsersKinemedanaconda3envsanwenlibsite-packagesdjangodbmodelssqlcompiler.py", line 1049, in results_iter
results = self.execute_sql(MULTI, chunked_fetch=chunked_fetch, chunk_size=chunk_size)
File "C:UsersKinemedanaconda3envsanwenlibsite-packagesdjangodbmodelssqlcompiler.py", line 1097, in execute_sql
cursor.execute(sql, params)
File "C:UsersKinemedanaconda3envsanwenlibsite-packagesdjangodbbackendsutils.py", line 99, in execute
return super().execute(sql, params)
File "C:UsersKinemedanaconda3envsanwenlibsite-packagesdjangodbbackendsutils.py", line 67, in execute
return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
File "C:UsersKinemedanaconda3envsanwenlibsite-packagesdjangodbbackendsutils.py", line 76, in _execute_with_wrappers
return executor(sql, params, many, context)
File "C:UsersKinemedanaconda3envsanwenlibsite-packagesdjangodbbackendsutils.py", line 84, in _execute
return self.cursor.execute(sql, params)
File "C:UsersKinemedanaconda3envsanwenlibsite-packagesdjangodbutils.py", line 89, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "C:UsersKinemedanaconda3envsanwenlibsite-packagesdjangodbbackendsutils.py", line 84, in _execute
return self.cursor.execute(sql, params)
File "C:UsersKinemedanaconda3envsanwenlibsite-packagesdjangodbbackendssqlite3base.py", line 383, in execute
return Database.Cursor.execute(self, query, params)
django.db.utils.OperationalError: no such table: catalog_categorias_producto
(anwen) PS C:UsersKinemedkinemed-productionkinemed-production> python manage.py migrate --fake APPNAME zero
Traceback (most recent call last):
File "C:UsersKinemedanaconda3envsanwenlibsite-packagesdjangodbbackendsutils.py", line 84, in _execute
return self.cursor.execute(sql, params)
File "C:UsersKinemedanaconda3envsanwenlibsite-packagesdjangodbbackendssqlite3base.py", line 383, in execute
return Database.Cursor.execute(self, query, params)
sqlite3.OperationalError: no such table: catalog_categorias_producto
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "manage.py", line 15, in <module>
execute_from_command_line(sys.argv)
File "C:UsersKinemedanaconda3envsanwenlibsite-packagesdjangocoremanagement__init__.py", line 381, in execute_from_command_line
utility.execute()
File "C:UsersKinemedanaconda3envsanwenlibsite-packagesdjangocoremanagement__init__.py", line 357, in execute
django.setup()
File "C:UsersKinemedanaconda3envsanwenlibsite-packagesdjango__init__.py", line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File "C:UsersKinemedanaconda3envsanwenlibsite-packagesdjangoappsregistry.py", line 122, in populate
app_config.ready()
File "C:UsersKinemedanaconda3envsanwenlibsite-packagesdjangocontribadminapps.py", line 24, in ready
self.module.autodiscover()
File "C:UsersKinemedanaconda3envsanwenlibsite-packagesdjangocontribadmin__init__.py", line 26, in autodiscover
autodiscover_modules('admin', register_to=site)
File "C:UsersKinemedanaconda3envsanwenlibsite-packagesdjangoutilsmodule_loading.py", line 47, in autodiscover_modules
import_module('%s.%s' % (app_config.name, module_to_search))
File "C:UsersKinemedanaconda3envsanwenlibimportlib__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
File "<frozen importlib._bootstrap>", line 983, in _find_and_load
File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 728, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "C:UsersKinemedkinemed-productionkinemed-productioncatalogadmin.py", line 5, in <module>
from catalog.forms import CambiarPreciosForm
File "C:UsersKinemedkinemed-productionkinemed-productioncatalogforms.py", line 83, in <module>
class FormularioOperaciones(forms.ModelForm):
File "C:UsersKinemedkinemed-productionkinemed-productioncatalogforms.py", line 94, in FormularioOperaciones
categorias = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple, choices=[(choice, choice) for choice in Categorias_Producto.objects.all().order_by().values_list('categoria_producto_ing', flat=True)], required=False)
File "C:UsersKinemedanaconda3envsanwenlibsite-packagesdjangodbmodelsquery.py", line 274, in __iter__
self._fetch_all()
File "C:UsersKinemedanaconda3envsanwenlibsite-packagesdjangodbmodelsquery.py", line 1242, in _fetch_all
self._result_cache = list(self._iterable_class(self))
File "C:UsersKinemedanaconda3envsanwenlibsite-packagesdjangodbmodelsquery.py", line 182, in __iter__
for row in compiler.results_iter(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size):
File "C:UsersKinemedanaconda3envsanwenlibsite-packagesdjangodbmodelssqlcompiler.py", line 1049, in results_iter
results = self.execute_sql(MULTI, chunked_fetch=chunked_fetch, chunk_size=chunk_size)
File "C:UsersKinemedanaconda3envsanwenlibsite-packagesdjangodbmodelssqlcompiler.py", line 1097, in execute_sql
cursor.execute(sql, params)
File "C:UsersKinemedanaconda3envsanwenlibsite-packagesdjangodbbackendsutils.py", line 99, in execute
return super().execute(sql, params)
File "C:UsersKinemedanaconda3envsanwenlibsite-packagesdjangodbbackendsutils.py", line 67, in execute
return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
File "C:UsersKinemedanaconda3envsanwenlibsite-packagesdjangodbbackendsutils.py", line 76, in _execute_with_wrappers
return executor(sql, params, many, context)
File "C:UsersKinemedanaconda3envsanwenlibsite-packagesdjangodbbackendsutils.py", line 84, in _execute
return self.cursor.execute(sql, params)
File "C:UsersKinemedanaconda3envsanwenlibsite-packagesdjangodbutils.py", line 89, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "C:UsersKinemedanaconda3envsanwenlibsite-packagesdjangodbbackendsutils.py", line 84, in _execute
return self.cursor.execute(sql, params)
File "C:UsersKinemedanaconda3envsanwenlibsite-packagesdjangodbbackendssqlite3base.py", line 383, in execute
return Database.Cursor.execute(self, query, params)
django.db.utils.OperationalError: no such table: catalog_categorias_producto

这是有问题的行:

categorias = forms.MultipleChoiceField(
widget=forms.CheckboxSelectMultiple,
choices=[
(choice, choice) for choice in
Categorias_Producto.objects.all()
.order_by().values_list('categoria_producto_ing', flat=True)
],
required=False
)

这将在声明时计算查询。因此,如果该表还不存在,这将创建您所看到的内容。如果表已经存在,那么它就不会引起问题(所以已经有表的环境不会出错,这解释了其他工作环境(。

一旦你了解了ModelMultipleChoiceField,它也是完全不需要的。

实质

很多刚接触python的人并不完全理解导入系统以及所谓的"导入"系统;申报时间":导入系统执行所有声明代码的时间。这不是函数或方法的一部分,而是声明的一部分的代码,例如类语句、类属性、常量、导入语句和模块级赋值。

这些事情被执行,而不仅仅是";读取";,它允许您做一些非常漂亮的事情,比如在类的继承声明中调用工厂函数。

不管怎样,您可能听说过查询集的延迟求值,这是真的,但由于您将其粘贴在列表表达式中,因此实际上会立即对其求值并执行。您可以从跟踪中的导入树中看到它:admin应用程序的autodiscover导入声明字段的表单,该字段向包含执行查询集的列表表达式的类构造函数声明关键字参数。~:(

最新更新