web-dev-qa-db-ja.com

Django-そのようなテーブル例外はありません

Djangoでは、いくつかのモデルをmodels.pyに追加しました。 manage.py makemigrationsの後、manage.py migrateはこの例外を発生させました。

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

だから私はすべての古い移行を削除し、makemigrationsmigrateを再度実行しました。

残念ながら、User customer profiles of 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'))

問題がどこにあるか知っていますか?ありがとう

10
Milano

私はこれらの手順で同じ問題を解決しました:

  • プロジェクトディレクトリのデータベース(私の場合はdb.sqlite3)を削除します
  • プロジェクトサブディレクトリの下の__pycache__フォルダからすべてを削除します
  • 修正しようとしているアプリケーションのフォルダーに移動し、migrationsおよび__pycache__ディレクトリーをクリアします

上記のファイルをすべてクリアしたことが確実な場合は、次を実行します。

python manage.py makemigrations
python manage.py migrate

これがお役に立てば幸いです。

41
aks

別のケースでは、no such tableエラーが発生する場合があります。 views.pyまたは同様のものが、インポート時にDBにアクセスしようとするコードを実行する場合、つまりviews.pyをインポートすると副作用が発生する場合、ゼロからの開始は機能しません

これは、コードが既存のDBで動作していたときに発生し、現在はDBなしで開始しようとしています。副作用なしでインポートできるように、views.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
21
Terry Brown

Terry_brownの答えに加えて、これが私の問題の原因です。別のモデルへのForeignKeyを使用したカスタムユーザーモデルがありました。そして、デフォルトをDBの最初のオブジェクトに設定します。データベースにデータがあるときに機能しました。しかし、最初から始めたときは、インポートするとすぐに実行されたため、機能しませんでした(したがって、移行も行われませんでした)。

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

default(コメントアウト)を犠牲にしなければなりませんでした。

更新:より良い解決策は、データベースに初期移行またはフィクスチャを事前に設定することです。

6
kotrfa

以下のコマンドを実行します。一度この問題を解決します

manage.py migrate --run-syncdb

1
bappi

それを解決するために私はこれをしました(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

0
adam

時間切れかもしれませんが... Django 1.11のインストールを他のディレクトリに「クローン」して、最初に移行を管理しようとすると、同じ問題が発生します。

私は次の方法で問題を解決します:

  1. Djangoの初期インストールとメインアプリケーションの作成をセットアップします。

Django-admin.py startproject app_name

  1. 初期移行は、移行を管理し、移行を管理します

  2. スーパーユーザーをセットアップします。

createsuperuserを管理します

  1. メインディレクトリのurls.pyとsettings.pyを除くすべてのファイルとディレクトリ(Djangoアプリケーション)をコピーします

  2. すべてのアプリをINSTALLED_APPSに追加しました

  3. 移行の管理、移行の管理

  4. ソースDjangoアプリケーションディレクトリからsettings.pyおよびurls.pyをコピーしました

それはエラーではなく、すべて正常に動作しています。

ペトル

0
Petr

他の誰かがこの問題を抱えていて、受け入れられた解決策が機能しない場合は、dbパスを見てください。dbパスは絶対パスである必要があります'NAME': '/pathto-db/default.db',

リンク

0
Batman