Django - нет такого исключения таблицы
В Django я добавил некоторые модели в models.py
. После manage.py makemigrations
, manage.py migrate
вызывает это исключение:
django.db.utils.OperationalError: no such table: auth_test_usertranslatorprofile
Поэтому я удалил все старые миграции и запустил makemigrations
и снова makemigrations
migrate
которая, казалось, сработала.
К сожалению, я заметил, что это не помогло, потому что, когда я пытаюсь щелкнуть User customer profiles
User translator profiles
User customer profiles
User translator profiles
это вызывает исключение:
Окружающая среда:
Request Method: GET
Request URL: http://127.0.0.1:8000/admin/auth_test/usertranslatorprofile/
Django Version: 1.8.7
Python Version: 2.7.10
Installed Applications:
('django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'auth_test')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware')
Traceback:
File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response
132. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Python27\lib\site-packages\django\contrib\admin\options.py" in wrapper
618. return self.admin_site.admin_view(view)(*args, **kwargs)
File "C:\Python27\lib\site-packages\django\utils\decorators.py" in _wrapped_view
110. response = view_func(request, *args, **kwargs)
File "C:\Python27\lib\site-packages\django\views\decorators\cache.py" in _wrapped_view_func
57. response = view_func(request, *args, **kwargs)
File "C:\Python27\lib\site-packages\django\contrib\admin\sites.py" in inner
233. return view(request, *args, **kwargs)
File "C:\Python27\lib\site-packages\django\utils\decorators.py" in _wrapper
34. return bound_func(*args, **kwargs)
File "C:\Python27\lib\site-packages\django\utils\decorators.py" in _wrapped_view
110. response = view_func(request, *args, **kwargs)
File "C:\Python27\lib\site-packages\django\utils\decorators.py" in bound_func
30. return func.__get__(self, type(self))(*args2, **kwargs2)
File "C:\Python27\lib\site-packages\django\contrib\admin\options.py" in changelist_view
1550. self.list_max_show_all, self.list_editable, self)
File "C:\Python27\lib\site-packages\django\contrib\admin\views\main.py" in __init__
82. self.get_results(request)
File "C:\Python27\lib\site-packages\django\contrib\admin\views\main.py" in get_results
177. result_count = paginator.count
File "C:\Python27\lib\site-packages\django\core\paginator.py" in _get_count
72. self._count = self.object_list.count()
File "C:\Python27\lib\site-packages\django\db\models\query.py" in count
318. return self.query.get_count(using=self.db)
File "C:\Python27\lib\site-packages\django\db\models\sql\query.py" in get_count
466. number = obj.get_aggregation(using, ['__count'])['__count']
File "C:\Python27\lib\site-packages\django\db\models\sql\query.py" in get_aggregation
447. result = compiler.execute_sql(SINGLE)
File "C:\Python27\lib\site-packages\django\db\models\sql\compiler.py" in execute_sql
840. cursor.execute(sql, params)
File "C:\Python27\lib\site-packages\django\db\backends\utils.py" in execute
79. return super(CursorDebugWrapper, self).execute(sql, params)
File "C:\Python27\lib\site-packages\django\db\backends\utils.py" in execute
64. return self.cursor.execute(sql, params)
File "C:\Python27\lib\site-packages\django\db\utils.py" in __exit__
98. six.reraise(dj_exc_type, dj_exc_value, traceback)
File "C:\Python27\lib\site-packages\django\db\backends\utils.py" in execute
64. return self.cursor.execute(sql, params)
File "C:\Python27\lib\site-packages\django\db\backends\sqlite3\base.py" in execute
318. return Database.Cursor.execute(self, query, params)
Exception Type: OperationalError at /admin/auth_test/usertranslatorprofile/
Exception Value: no such table: auth_test_usertranslatorprofile
Я прикрепляю свои файлы:
MODELS.PY:
from django.db import models
from django.contrib.auth.models import User
class Language(models.Model):
shortcut = models.CharField(max_length=6)
name = models.CharField(max_length=50)
price_per_sign = models.FloatField()
class UserTranslatorProfile(models.Model):
user = models.OneToOneField(User)
languages = models.ManyToManyField(Language)
price_per_word = models.FloatField()
class UserCustomerProfile(models.Model):
user = models.OneToOneField(User)
ADMIN.PY:
from django import forms
from .models import Language
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
class FreelancerRegistrationForm(forms.Form):
language = forms.ModelChoiceField(queryset=Language.objects.all().order_by('shortcut'))
Вы знаете, где проблема? благодаря
Ответы
Ответ 1
Я решил ту же проблему с этими шагами:
- Удалите свою базу данных (
db.sqlite3
в моем случае) в каталоге проекта - Удалите все из папки
__pycache__
под вашим подкаталогом проекта. - Для приложения, которое вы пытаетесь исправить, перейдите в папку и очистите
migrations
и __pycache__
Когда вы уверены, что вы очистили все вышеуказанные файлы, запустите:
python manage.py makemigrations
python manage.py migrate
Надеюсь, это поможет.
Ответ 2
В другом случае wihch может генерировать такую табличную ошибку. Если ваш view.py или аналогичный выполняет код, который пытается получить доступ к БД при импорте, т.е. Импортирование views.py имеет побочные эффекты, то запуск с нуля не будет работать.
Это происходит, когда ваш код работает с существующей БД, и теперь вы пытаетесь запустить без БД. Просто измените view.py, чтобы он мог быть импортирован без побочных эффектов. Если вы не хотите исправлять дизайн, сделайте следующее:
from django.db.utils import OperationalError
format_list = [('', '(all)')]
geom_type_list = [('', '(all)')]
try:
format_list.extend([(i[0],i[0])
for i in Format.objects.values_list('name')])
geom_type_list.extend([(i[0],i[0])
for i in Geom_type.objects.values_list('name')])
except OperationalError:
pass # happens when db doesn't exist yet, views.py should be
# importable without this side effect
Ответ 3
Добавление к ответу terry_brown - вот что вызывает у меня проблемы. У меня была пользовательская модель с ForeignKey для другой модели. И я установил по умолчанию первый объект в БД. Это сработало, когда у меня были данные в базе данных. Но когда я начал с нуля, он не работал, потому что он был выполнен сразу после импорта (так что даже миграция не прошла).
class User(AbstractBaseUser, PermissionsMixin):
subscription_plan = models.ForeignKey(SubscriptionPlan, default=SubscriptionPlan.objects.first().id)
Я должен был пожертвовать этим default
(комментируя его).
ОБНОВЛЕНИЕ: лучшим решением было бы предварительно заполнить вашу базу данных начальной миграцией или фикстурами.
Ответ 4
Запустите команду ниже. Это решает меня однажды эту проблему
manage.py migrate --run-syncdb
Ответ 5
Может быть, вне времени, но... У меня такая же проблема, когда я пытался "клонировать" установку Django 1.11 в другой каталог, а затем с первоначальной попыткой управлять makemigrations.
Я решаю проблему следующим образом:
- установка первоначальной установки Django и создание основного приложения:
django-admin.py startproject app_name
-
начальные миграции управляют макетированиями, управляют миграцией
-
Настройка суперпользователя:
управлять createuperuser
-
скопируйте все файлы и каталоги (приложения Django), за исключением urls.py и settings.py в основной каталог
-
Добавлено все приложения в INSTALLED_APPS
-
управлять makemigrations, управлять миграцией
-
Скопированы параметры settings.py и urls.py из каталога каталога Django
Это не ошибки, и все работает нормально.
Petr
Ответ 6
Если у кого-то еще есть эта проблема, и принятое решение не работает, посмотрите на свой путь db, путь db должен быть абсолютным путем, 'NAME': '/pathto-db/default.db',
Ссылка на сайт
Ответ 7
В этом случае некоторые миграции все еще ждут, поэтому запустите python manage.py migrate и python manage.py makemigrations app_name
Ответ 8
Если ваши изменения в моделях данных огромны и имеют совпадения, у вас нет другого выбора, кроме как удалить базу данных.
Ответ 9
Чтобы решить эту проблему, я сделал это (в Ubuntu вам нужно будет адаптировать команды для Windows):
1. Удалите все файлы миграции
find . -path "*/migrations/*.py" -not -name "__init__.py" -delete
find . -path "*/migrations/*.pyc" -delete
2. Удалить db.sqlite3
rm db.sqlite3
3. Создайте и запустите миграции:
python manage.py makemigrations
python manage.py migrate
4. Синхронизировать базу данных:
manage.py migrate --run-syncdb
Немного боли, так как вам нужно удалить базу данных, но это хорошо для тестовой системы.
Получил все, кроме последнего шага от этого вообще отличного ресурса: https://simpleisbetterthancomplex.com/tutorial/2016/07/26/how-to-reset-migrations.html