2017-10-01 10 views
0

他の誰かがDjangoの移行に不満を感じているのか疑問に思う。私はSOに関するいくつかの関連記事を見てきましたが、特にこれに対処するものは見つかりませんでした。新鮮なデータベースでDjangoの移行が失敗する

これは私にとって起こり続けるもので、一般的なシナリオでなければならないので、何が欠けていますか?

私のシナリオ:

  1. リスト項目私は私のローカルマシン上のSQLiteを使用して反復
  2. 私は今、生産にPostgresqlのデシベル(AWSや他の場所に展開したい、Djangoアプリケーションを構築しました
  3. 新しいデータベースを設定して設定に追加して実行しますpython manage.py migrate
  4. モデルテーブルの1つが存在しないとSQLエラーが表示されます。ダー!だから私は移行を実行している。私が何をすべき -
  5. は私がsimple_history

私は明白な答えがなければならないと確信しているようにパッケージと、さらに問題を作成しますpython manage.py migrate <app_name> --fakeのような変な事をする、テーブルを手で作ることに終わります真新しくクリーンなデータベースにデータベーススキーマを設定しますか?


EDIT:エラーのトレースバック私は取得しています:私は、空のデータベース上でpython manage.py migrateを実行すると

は、私は次のエラーを取得する:

(banzai-platform-django) ➜ src git:(master) ✗ ./manage.py migrate 
Traceback (most recent call last): 
    File "/Users/joedavy/Dropbox/Apps/banzai-platform-django/lib/python3.6/site-packages/django/db/backends/utils.py", line 65, in execute 
    return self.cursor.execute(sql, params) 
psycopg2.ProgrammingError: relation "events_event" does not exist 
LINE 1: ...ents_event"."created", "events_event"."slug" FROM "events_ev... 
                  ^


The above exception was the direct cause of the following exception: 

Traceback (most recent call last): 
    File "./manage.py", line 22, in <module> 
    execute_from_command_line(sys.argv) 
    File "/Users/joedavy/Dropbox/Apps/banzai-platform-django/lib/python3.6/site-packages/django/core/management/__init__.py", line 363, in execute_from_command_line 
    utility.execute() 
    File "/Users/joedavy/Dropbox/Apps/banzai-platform-django/lib/python3.6/site-packages/django/core/management/__init__.py", line 355, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/Users/joedavy/Dropbox/Apps/banzai-platform-django/lib/python3.6/site-packages/django/core/management/base.py", line 283, in run_from_argv 
    self.execute(*args, **cmd_options) 
    File "/Users/joedavy/Dropbox/Apps/banzai-platform-django/lib/python3.6/site-packages/django/core/management/base.py", line 327, in execute 
    self.check() 
    File "/Users/joedavy/Dropbox/Apps/banzai-platform-django/lib/python3.6/site-packages/django/core/management/base.py", line 359, in check 
    include_deployment_checks=include_deployment_checks, 
    File "/Users/joedavy/Dropbox/Apps/banzai-platform-django/lib/python3.6/site-packages/django/core/management/commands/migrate.py", line 62, in _run_checks 
    issues.extend(super(Command, self)._run_checks(**kwargs)) 
    File "/Users/joedavy/Dropbox/Apps/banzai-platform-django/lib/python3.6/site-packages/django/core/management/base.py", line 346, in _run_checks 
    return checks.run_checks(**kwargs) 
    File "/Users/joedavy/Dropbox/Apps/banzai-platform-django/lib/python3.6/site-packages/django/core/checks/registry.py", line 81, in run_checks 
    new_errors = check(app_configs=app_configs) 
    File "/Users/joedavy/Dropbox/Apps/banzai-platform-django/lib/python3.6/site-packages/django/core/checks/urls.py", line 16, in check_url_config 
    return check_resolver(resolver) 
    File "/Users/joedavy/Dropbox/Apps/banzai-platform-django/lib/python3.6/site-packages/django/core/checks/urls.py", line 26, in check_resolver 
    return check_method() 
    File "/Users/joedavy/Dropbox/Apps/banzai-platform-django/lib/python3.6/site-packages/django/urls/resolvers.py", line 254, in check 
    for pattern in self.url_patterns: 
    File "/Users/joedavy/Dropbox/Apps/banzai-platform-django/lib/python3.6/site-packages/django/utils/functional.py", line 35, in __get__ 
    res = instance.__dict__[self.name] = self.func(instance) 
    File "/Users/joedavy/Dropbox/Apps/banzai-platform-django/lib/python3.6/site-packages/django/urls/resolvers.py", line 405, in url_patterns 
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module) 
    File "/Users/joedavy/Dropbox/Apps/banzai-platform-django/lib/python3.6/site-packages/django/utils/functional.py", line 35, in __get__ 
    res = instance.__dict__[self.name] = self.func(instance) 
    File "/Users/joedavy/Dropbox/Apps/banzai-platform-django/lib/python3.6/site-packages/django/urls/resolvers.py", line 398, in urlconf_module 
    return import_module(self.urlconf_name) 
    File "/Users/joedavy/Dropbox/Apps/banzai-platform-django/lib/python3.6/importlib/__init__.py", line 126, in import_module 
    return _bootstrap._gcd_import(name[level:], package, level) 
    File "<frozen importlib._bootstrap>", line 978, in _gcd_import 
    File "<frozen importlib._bootstrap>", line 961, in _find_and_load 
    File "<frozen importlib._bootstrap>", line 950, in _find_and_load_unlocked 
    File "<frozen importlib._bootstrap>", line 655, in _load_unlocked 
    File "<frozen importlib._bootstrap_external>", line 678, in exec_module 
    File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed 
    File "/Users/joedavy/Dropbox/Apps/banzai-platform-django/src/banzai_platform/urls.py", line 67, in <module> 
    url(r'^registrations/', include('registrations.urls')), 
    File "/Users/joedavy/Dropbox/Apps/banzai-platform-django/lib/python3.6/site-packages/django/conf/urls/__init__.py", line 50, in include 
    urlconf_module = import_module(urlconf_module) 
    File "/Users/joedavy/Dropbox/Apps/banzai-platform-django/lib/python3.6/importlib/__init__.py", line 126, in import_module 
    return _bootstrap._gcd_import(name[level:], package, level) 
    File "<frozen importlib._bootstrap>", line 978, in _gcd_import 
    File "<frozen importlib._bootstrap>", line 961, in _find_and_load 
    File "<frozen importlib._bootstrap>", line 950, in _find_and_load_unlocked 
    File "<frozen importlib._bootstrap>", line 655, in _load_unlocked 
    File "<frozen importlib._bootstrap_external>", line 678, in exec_module 
    File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed 
    File "/Users/joedavy/Dropbox/Apps/banzai-platform-django/src/registrations/urls.py", line 3, in <module> 
    from .views import (
    File "/Users/joedavy/Dropbox/Apps/banzai-platform-django/src/registrations/views.py", line 160, in <module> 
    class ConfirmEventListView(ListView): 
    File "/Users/joedavy/Dropbox/Apps/banzai-platform-django/src/registrations/views.py", line 164, in ConfirmEventListView 
    queryset = [obj for obj in events if obj.need_confirmation > 0] 
    File "/Users/joedavy/Dropbox/Apps/banzai-platform-django/lib/python3.6/site-packages/django/db/models/query.py", line 250, in __iter__ 
    self._fetch_all() 
    File "/Users/joedavy/Dropbox/Apps/banzai-platform-django/lib/python3.6/site-packages/django/db/models/query.py", line 1118, in _fetch_all 
    self._result_cache = list(self._iterable_class(self)) 
    File "/Users/joedavy/Dropbox/Apps/banzai-platform-django/lib/python3.6/site-packages/django/db/models/query.py", line 53, in __iter__ 
    results = compiler.execute_sql(chunked_fetch=self.chunked_fetch) 
    File "/Users/joedavy/Dropbox/Apps/banzai-platform-django/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 894, in execute_sql 
    raise original_exception 
    File "/Users/joedavy/Dropbox/Apps/banzai-platform-django/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 884, in execute_sql 
    cursor.execute(sql, params) 
    File "/Users/joedavy/Dropbox/Apps/banzai-platform-django/lib/python3.6/site-packages/django/db/backends/utils.py", line 80, in execute 
    return super(CursorDebugWrapper, self).execute(sql, params) 
    File "/Users/joedavy/Dropbox/Apps/banzai-platform-django/lib/python3.6/site-packages/django/db/backends/utils.py", line 65, in execute 
    return self.cursor.execute(sql, params) 
    File "/Users/joedavy/Dropbox/Apps/banzai-platform-django/lib/python3.6/site-packages/django/db/utils.py", line 94, in __exit__ 
    six.reraise(dj_exc_type, dj_exc_value, traceback) 
    File "/Users/joedavy/Dropbox/Apps/banzai-platform-django/lib/python3.6/site-packages/django/utils/six.py", line 685, in reraise 
    raise value.with_traceback(tb) 
    File "/Users/joedavy/Dropbox/Apps/banzai-platform-django/lib/python3.6/site-packages/django/db/backends/utils.py", line 65, in execute 
    return self.cursor.execute(sql, params) 
django.db.utils.ProgrammingError: relation "events_event" does not exist 
LINE 1: ...ents_event"."created", "events_event"."slug" FROM "events_ev... 
+0

展開するときには、マカミゲーションを実行しないでください。あなたは開発時にマカミゲーションを実行します。 –

+0

しかし、エラーが発生した場合は、完全なトレースバックとともに*投稿する必要があります。 –

+0

@DanielRoseman - 明確にするため、私の最初の考えはmanage.py migrateを実行することでしたが、それは同じエラーをもたらします。役に立ったと思われる場合には、エラー+トレースバックを投稿に追加しました。 –

答えて

1

あなたのトレースバックはあなたのことを示していあなたのConfirmEventListView内のクラスレベルのクエリーセットでリストの理解を実行しています。クラスレベルのものは、そのクラスが最初にインポートされたときに実行されます。したがって、このクエリはDjangoコマンドが実行された直後に実行されます。これは、移行が実行される前です。

このレベルのデータベースにアクセスするものは絶対にしないでください。 (実際にはクエリーセットではないリストを返すので、このリストの理解は一切行ってはいけないので、実際のクエリーセットを期待するページングやその他のものではうまくいきません。コードは機能しますが、これはあなたのケースでは問題ではないと仮定できます)。

need_confirmationがフィールドの場合、クエリセットはEvent.objects.filter(need_confirmation__gt=0)と定義する必要があります。ただし、モデルメソッドの場合は、ConfirmEventListViewにget_queryset()メソッドを定義し、クラスレベルではなく、この処理を行う必要があります。

+0

ありがとうトン - それはなぜ私がエラーを得ていたか説明します。したがって、 'get_queryset()'のようなクラス内部のメソッドは評価されませんか? 'need_confirmation'は@propertyで宣言されたモデルメソッドです。モデルメソッドに基づいてリストをフィルタリングする代わりにクエリセットを返す方法についてのガイダンスはありますか? –

+1

違いは、 'get_queryset'は定義時ではなくリクエストの一部として呼び出されるということです。実際、別の質問で私に指摘されたように、そのメソッドからリストを返すのは完全に有効です。そのリストのcompをメソッドに移動して返すだけで、すべてがうまくいくはずです。 –

+0

驚くばかり - それは今やっているようです。 –

関連する問題