Reputation: 962
I have a Django APP that work perfectly fine.
I downloaded the repository from Github to a new laptop, but when I try to run:
python manage.py makemigrations
runserver
etc
I get django.db.utils.OperationalError: no such table: catalog_categorias_producto
Already tried:
db.sqlite3
__init__
)makemigrations
againNo difference.
Any clues? Thanks!
Full error log
Traceback (most recent call last):
File "C:\Users\Kinemed\anaconda3\envs\anwen\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
File "C:\Users\Kinemed\anaconda3\envs\anwen\lib\site-packages\django\db\backends\sqlite3\base.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:\Users\Kinemed\anaconda3\envs\anwen\lib\site-packages\django\core\management\__init__.py", line 381, in execute_from_command_line
utility.execute()
File "C:\Users\Kinemed\anaconda3\envs\anwen\lib\site-packages\django\core\management\__init__.py", line 357, in execute
django.setup()
File "C:\Users\Kinemed\anaconda3\envs\anwen\lib\site-packages\django\__init__.py", line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File "C:\Users\Kinemed\anaconda3\envs\anwen\lib\site-packages\django\apps\registry.py", line 122, in populate
app_config.ready()
File "C:\Users\Kinemed\anaconda3\envs\anwen\lib\site-packages\django\contrib\admin\apps.py", line 24, in ready
self.module.autodiscover()
File "C:\Users\Kinemed\anaconda3\envs\anwen\lib\site-packages\django\contrib\admin\__init__.py", line 26, in autodiscover
autodiscover_modules('admin', register_to=site)
File "C:\Users\Kinemed\anaconda3\envs\anwen\lib\site-packages\django\utils\module_loading.py", line 47, in autodiscover_modules
import_module('%s.%s' % (app_config.name, module_to_search))
File "C:\Users\Kinemed\anaconda3\envs\anwen\lib\importlib\__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:\Users\Kinemed\kinemed-production\kinemed-production\catalog\admin.py", line 5, in <module>
from catalog.forms import CambiarPreciosForm
File "C:\Users\Kinemed\kinemed-production\kinemed-production\catalog\forms.py", line 83, in <module>
class FormularioOperaciones(forms.ModelForm):
File "C:\Users\Kinemed\kinemed-production\kinemed-production\catalog\forms.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:\Users\Kinemed\anaconda3\envs\anwen\lib\site-packages\django\db\models\query.py", line 274, in __iter__
self._fetch_all()
File "C:\Users\Kinemed\anaconda3\envs\anwen\lib\site-packages\django\db\models\query.py", line 1242, in _fetch_all
self._result_cache = list(self._iterable_class(self))
File "C:\Users\Kinemed\anaconda3\envs\anwen\lib\site-packages\django\db\models\query.py", line 182, in __iter__
for row in compiler.results_iter(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size):
File "C:\Users\Kinemed\anaconda3\envs\anwen\lib\site-packages\django\db\models\sql\compiler.py", line 1049, in results_iter
results = self.execute_sql(MULTI, chunked_fetch=chunked_fetch, chunk_size=chunk_size)
File "C:\Users\Kinemed\anaconda3\envs\anwen\lib\site-packages\django\db\models\sql\compiler.py", line 1097, in execute_sql
cursor.execute(sql, params)
File "C:\Users\Kinemed\anaconda3\envs\anwen\lib\site-packages\django\db\backends\utils.py", line 99, in execute
return super().execute(sql, params)
File "C:\Users\Kinemed\anaconda3\envs\anwen\lib\site-packages\django\db\backends\utils.py", line 67, in execute
return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
File "C:\Users\Kinemed\anaconda3\envs\anwen\lib\site-packages\django\db\backends\utils.py", line 76, in _execute_with_wrappers
return executor(sql, params, many, context)
File "C:\Users\Kinemed\anaconda3\envs\anwen\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
File "C:\Users\Kinemed\anaconda3\envs\anwen\lib\site-packages\django\db\utils.py", line 89, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "C:\Users\Kinemed\anaconda3\envs\anwen\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
File "C:\Users\Kinemed\anaconda3\envs\anwen\lib\site-packages\django\db\backends\sqlite3\base.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:\Users\Kinemed\kinemed-production\kinemed-production> python manage.py migrate --fake APPNAME zero
Traceback (most recent call last):
File "C:\Users\Kinemed\anaconda3\envs\anwen\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
File "C:\Users\Kinemed\anaconda3\envs\anwen\lib\site-packages\django\db\backends\sqlite3\base.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:\Users\Kinemed\anaconda3\envs\anwen\lib\site-packages\django\core\management\__init__.py", line 381, in execute_from_command_line
utility.execute()
File "C:\Users\Kinemed\anaconda3\envs\anwen\lib\site-packages\django\core\management\__init__.py", line 357, in execute
django.setup()
File "C:\Users\Kinemed\anaconda3\envs\anwen\lib\site-packages\django\__init__.py", line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File "C:\Users\Kinemed\anaconda3\envs\anwen\lib\site-packages\django\apps\registry.py", line 122, in populate
app_config.ready()
File "C:\Users\Kinemed\anaconda3\envs\anwen\lib\site-packages\django\contrib\admin\apps.py", line 24, in ready
self.module.autodiscover()
File "C:\Users\Kinemed\anaconda3\envs\anwen\lib\site-packages\django\contrib\admin\__init__.py", line 26, in autodiscover
autodiscover_modules('admin', register_to=site)
File "C:\Users\Kinemed\anaconda3\envs\anwen\lib\site-packages\django\utils\module_loading.py", line 47, in autodiscover_modules
import_module('%s.%s' % (app_config.name, module_to_search))
File "C:\Users\Kinemed\anaconda3\envs\anwen\lib\importlib\__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:\Users\Kinemed\kinemed-production\kinemed-production\catalog\admin.py", line 5, in <module>
from catalog.forms import CambiarPreciosForm
File "C:\Users\Kinemed\kinemed-production\kinemed-production\catalog\forms.py", line 83, in <module>
class FormularioOperaciones(forms.ModelForm):
File "C:\Users\Kinemed\kinemed-production\kinemed-production\catalog\forms.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:\Users\Kinemed\anaconda3\envs\anwen\lib\site-packages\django\db\models\query.py", line 274, in __iter__
self._fetch_all()
File "C:\Users\Kinemed\anaconda3\envs\anwen\lib\site-packages\django\db\models\query.py", line 1242, in _fetch_all
self._result_cache = list(self._iterable_class(self))
File "C:\Users\Kinemed\anaconda3\envs\anwen\lib\site-packages\django\db\models\query.py", line 182, in __iter__
for row in compiler.results_iter(chunked_fetch=self.chunked_fetch, chunk_size=self.chunk_size):
File "C:\Users\Kinemed\anaconda3\envs\anwen\lib\site-packages\django\db\models\sql\compiler.py", line 1049, in results_iter
results = self.execute_sql(MULTI, chunked_fetch=chunked_fetch, chunk_size=chunk_size)
File "C:\Users\Kinemed\anaconda3\envs\anwen\lib\site-packages\django\db\models\sql\compiler.py", line 1097, in execute_sql
cursor.execute(sql, params)
File "C:\Users\Kinemed\anaconda3\envs\anwen\lib\site-packages\django\db\backends\utils.py", line 99, in execute
return super().execute(sql, params)
File "C:\Users\Kinemed\anaconda3\envs\anwen\lib\site-packages\django\db\backends\utils.py", line 67, in execute
return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
File "C:\Users\Kinemed\anaconda3\envs\anwen\lib\site-packages\django\db\backends\utils.py", line 76, in _execute_with_wrappers
return executor(sql, params, many, context)
File "C:\Users\Kinemed\anaconda3\envs\anwen\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
File "C:\Users\Kinemed\anaconda3\envs\anwen\lib\site-packages\django\db\utils.py", line 89, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "C:\Users\Kinemed\anaconda3\envs\anwen\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
File "C:\Users\Kinemed\anaconda3\envs\anwen\lib\site-packages\django\db\backends\sqlite3\base.py", line 383, in execute
return Database.Cursor.execute(self, query, params)
django.db.utils.OperationalError: no such table: catalog_categorias_producto
Upvotes: 0
Views: 42
Reputation:
This is the problematic line:
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
)
This evaluates a query at declaration time. So if the table doesn't exist yet, this creates what you're seeing. If the table already exists, then it won't cause a problem (so environments that already have the table won't error, which explains the other working ones).
It's also completely unneeded, once you learn about ModelMultipleChoiceField.
A lot of people new to python don't fully understand the import system and what is called "Declaration time": the time that the import system executes all declared code. This is code that is not part of a function or method, but is part of a declaration, such as class statements, class attributes, constants, import statements and module-level assignments.
These things are executed, not just "read", which allows you to do some very nifty stuff, like call factory functions inside the inheritance declaration of a class.
Anyway - you probably heard about lazy evaluation of querysets, which is true, but since you stuck it inside a list expression, it is in fact evaluated and executed immediately. You can see it from the import tree in the trace back: admin app's autodiscover imports the form which declares a field, which declares a keyword argument to a class constructor that contains a list expression that executes a queryet. ~:)
Upvotes: 1