2015-12-31 2 views
1

В Django я добавил некоторые модели в models.py. После manage.py makemigrations, manage.py migrate поднял это исключение:Django - нет такого исключения таблицы

django.db.utils.OperationalError: no such table: auth_test_usertranslatorprofile 

Так я удалил все старые миграции и запустить makemigrations и migrate снова, который, казалось, работали.

К сожалению, я заметил, что это не помогло, потому что, когда я пытаюсь нажать на 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

Вы пытались очистить базу данных и попробовать еще раз? Ваша миграция попытается создать все, но некоторые вещи уже существуют и в любом случае потерпят неудачу. – cdvv7788

+0

Вы имеете в виду manage.py flush? Да, я сделал это, но это не помогло. Как я могу очистить базу данных? –

+0

Не могли бы вы запустить это в sql-оболочке? выберите * из django_migrations, где app = 'auth_test'; и опубликовать вывод? – Paulo

ответ

18

я решил такую ​​же проблему с этими шагами:

  • Удаления базы данных (db.sqlite3 в моем случае) в каталоге проекта
  • Удалить все из __pycache__ папки под проектом подкаталога
  • Для приложение, которое вы пытаетесь исправить, перейдите в папку и очистите migrations и __pycache__ каталоги

Когда вы уверены, что вы очистили все вышеуказанные файлы, запустите:

python manage.py makemigrations 
python manage.py migrate 

Я надеюсь, что это помогает.

+0

достижение wits end: что, если «управлять makemigrations» - это вещь, бросающая «django.db.utils.OperationalError: no such table: ......» error? –

+0

У меня такая же проблема после открытия> оболочки python manage.py, а затем введите> из model_name.models import model1, model2, а затем после вызова> model1.objects.all() Я получаю ошибку - django.db.utils .OperationalError: нет такой таблицы: model1 –

13

Другой случай 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 
+0

Я думаю, что у меня есть эта проблема, но где должен выполняться фрагмент кода выше? А что такое Format и Geom_type? Похоже, модели, но где они живут? (Я получаю «NameError: имя« Формат »не определен») – MrJalapeno

+0

@MrJalapeno код идет в начале views.py. Формат и Geom_type были специфичны для моего приложения. - Я пытался сделать список уровней модулей доступных форматов/Geom_Types, и это не удается, когда БД еще не создано. Если вы делаете что-то подобное, оберните попытку:/except: вроде бы это может помочь. –

+0

Спасибо! Получил его работу, хотя :) Мои представления импортировали мои формы, в которых запрос вызывал проблему. Работал, если я прокомментировал это, пока база данных не была запущена. – MrJalapeno

1

Добавление к ответу terry_brown, это то, что причиной моих проблем. У меня была пользовательская модель с ForeignKey для другой модели. И я устанавливаю значения по умолчанию для первого объекта в БД. Он работал, когда у меня были данные в базе данных. Но когда я начал с нуля, это не сработало, потому что оно было выполнено сразу же при импорте (так что даже миграция не прошла).

class User(AbstractBaseUser, PermissionsMixin): subscription_plan = models.ForeignKey(SubscriptionPlan, default=SubscriptionPlan.objects.first().id)

я должен был принести в жертву, что default (комментируя это).

+0

Такая же проблема здесь. В моем случае у меня был класс, который пытался получить доступ к БД в своем конструкторе. – Gadzooks34

Смежные вопросы