manage.py syncdbは、一部のモデルのテーブルを追加しません
-
07-07-2019 - |
質問
この日は2番目のそれほど熟達していない質問です。4つのアプリをインストールしたdjangoプロジェクトがあります。 manage.py syndbを実行すると、そのうち2つのテーブルのみが作成されます。私の知る限り、どのモデルファイルにも問題はなく、すべてのアプリは設定ファイルのINSTALLED_APPSで指定されています。 Manage.py syndbは、2つのアプリを無視しているようです。
2つの「無視された」ことでユニークなことアプリは、モデルファイルが他の2つのアプリからモデルをインポートし、それらを外部キーとして使用することです(これが良いか悪いかはわかりませんが、整理しておくのに役立ちます)。ただし、外部キーを持つモデルをコメントアウトし、テーブルはまだ作成されていないため、これが問題だとは思いません。困惑しています。
更新:他のアプリからモデルファイルをインポートする行をコメントアウトすると、syndbがテーブルを作成します。おそらく、別々のアプリのモデルファイルが他のアプリとどのように関連しているかについて、私は理解していないでしょう。ただインポートするだけで、別のアプリのモデルを外部キーとして使用しても問題ありませんでした。違いますか?
解決
残念ながら、manage.pyは、models.py(にインポートエラーがある場合、アプリのサイレントロードに失敗します。チケット#10706 )。 models.pyファイルの1つにタイプミスがある可能性があります。すべてのimportステートメントを詳細に確認します(または、pylintを使用します)。
最近、syncdbがいくつかのアプリの読み込みを停止し、sqlallから「quot;ラベルfooのアプリが見つかりませんでした」というエラーが表示されました。これが「ラベルfooのアプリが見つかったがImportErrorが発生したためにロードできなかった」ことを意味することがわからないため、「hashlib」ではなく「haslib」をインポートしようとしていることに気付くのに30分かかりました私のmodels.pyファイル。
他のヒント
似たようなものに出くわしたと思います。
モデルがリセットされないという問題がありました。 この場合、モデルに吐き出されていないエラーがあることが判明しました。
syncdbを実行すると、何らかのエラーが発生します。
いずれの場合でも、シェルからモデルファイルをインポートして、可能かどうかを確認してください。
$ manage.py shell
>>> from myapp import models
>>>
ファイルにエラーがある場合は、指摘する必要があります。
アップデートによると、相互インポートの問題があるようです。 代わりに:
from app1.models import X
class ModelA(models.Model):
fk = models.ForeignKey(X)
試してください:
class ModelA(models.Model):
fk = models.ForeignKey("app1.X")
... syncdbでエラーが発生するはずです。