4

今日の私の2番目のあまり熟達していない質問:私は4つのアプリがインストールされたdjangoプロジェクトを持っています。manage.py syndbを実行すると、そのうちの2つだけのテーブルが作成されます。私の知る限り、どのモデルファイルにも問題はなく、すべてのアプリは設定ファイルのINSTALLED_APPSで指定されています。Manage.pysyndbは私のアプリの2つを無視しているようです。

2つの「無視された」アプリのユニークな点の1つは、モデルファイルが他の2つのアプリからモデルをインポートし、それらを外部キーとして使用することです(これが良い/悪い習慣かどうかはわかりませんが、整理された状態を維持するのに役立ちます)。ただし、外部キーを持つモデルをコメントアウトしたのに、テーブルがまだ作成されていないため、これは問題ではないと思います。私は困惑しています。

更新:他のアプリからモデルファイルをインポートする行をコメントアウトすると、syndbがテーブルを作成します。おそらく私は、別々のアプリのモデルファイルが他のアプリとどのように関連しているかについて何かを理解していません。別のアプリのモデルをインポートするだけで外部キーとして使用しても問題ありませんでした。違います?

4

2 に答える 2

8

似たようなものに出くわしたと思います。

モデルがリセットされないという問題がありました。この場合、吐き出されていない私のモデルにエラーがあったことが判明しました。

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でエラーが発生するはずですが。

于 2009-09-16T22:06:55.797 に答える
6

残念ながら、manage.pyは、models.py(チケット#10706 )にインポートエラーがあるアプリの読み込みにサイレントに失敗します。models.pyファイルの1つにタイプミスがある可能性があります...すべてのインポートステートメントを注意深くチェックしてください(またはpylintを使用してください)。

最近、syncdbがいくつかのアプリの読み込みを停止し、sqlallから「ラベルfooのアプリが見つかりませんでした」というエラーが表示されました。これが「fooというラベルのアプリが見つかったが、ImportErrorが発生したためにロードできなかった」という意味であることがあることを知らなかったため、「hashlib」ではなく「haslib」をインポートしようとしていることに気付くのに30分かかりました。私のmodels.pyファイル。

于 2009-09-16T23:26:28.287 に答える