2012-12-24 3 views
8

既存のモデルに多対多フィールドを追加しましたが、syncdbは新しいテーブルを作成することを期待していましたが、そこには何もありません。これは、モデルは次のようになります。sql myappを実行Django-syncdbはテーブルを作成しません

class Author(models.Model): 
    first_name = models.CharField(max_length=50) 
    last_name = models.CharField(max_length=50) 
    email = models.EmailField() 

    def __unicode__(self): 
     return "{0} {1}".format(self.first_name, self.last_name) 

class Book(models.Model): 
    title = models.CharField(max_length=100) 
    authors = models.ManyToManyField(Author) 

    def __unicode__(self): 
     return self.title 

は新しいテーブルで正しい文を出力しますが、私はsyncdbを実行したときにこれが反映されません。 validateもエラーは返されません。誰もがここで何が問題になるかも知っていますか?または、より良い診断ですか?

答えて

15

syncdbコマンドは、既存のモデルの多くのテーブルを設計によって作成しません。この決定はticket 2229で説明されています。

これで、いくつかのオプションがあります。

  • ブックモデルにデータがない場合は、テーブルを削除してからsyncdbを再実行してください。 Djangoはブックテーブルと多対多テーブルを再作成します。
  • dbshel​​lコマンドを使用して、sql myappの出力を使用して多対多の結合テーブルを作成します。
  • Djangoで複数のスキーマの移行を行っている場合は、Southで友達を作る。
5

この説明はdjangoのドキュメントで便利です:SchemaEvolutionです。

データベース移行の事実上の標準は、Django Southです。

これは完璧ではありませんが、かなりうまく機能します。マイグレーションファイルを実行する前に、マイグレーションファイルが実際に実行されていることを必ず確認する(必要な場合は編集する)必要があります。 チュートリアルhereをご覧ください。

また、あなたが実行した場合:データベースの構造は、あなたのDjangoのモデルに一致した場合

python manage.py inspectdb > somefile.txt 

あなたはすぐにチェックアウトすることができます。

関連する問題