web-dev-qa-db-ja.com

既存のDjangoモデルにフィールドを追加する

ユーザー数が少ない小さなWebサイトを持っているので、モデル(およびテーブル)の1つにフィールドを追加したいと思います。問題は、syncdbが既存のモデルに影響を与えず、全体を再入力することなく、このフィールドをモデル/テーブルに追加する方法を理解しようとしています。

例:

class Newspaper(models.Model):
    name = models.CharField()

class UserProfile(models.Model):
    user = models.ForeignKey(user, unique=True)
    reads = models.ManyToManyField(Newspaper)

次に、URLフィールド(blank=True)をNewspaperモデルに変更します。ユーザープロファイルを壊すことはありません。

何か案は?

51
Deniz Dogan

これを行う組み込みの方法はありません。しかし、あなたのためにそれを行うサードパーティのプロジェクトがいくつかあります。主要な2つは South および Django-evolution と呼ばれますが、他にもさまざまなものがあります(私が関わってきたものを含む)。

私は間違いなくサウスをお勧めします-それは多くの本当にきちんとした機能があり、本当にうまく機能します。

38
Daniel Roseman

以下を使用して、新しいフィールドのSQLを取得してみることができます。

manage.py sql appname

ここで、appnameは新聞クラスが住んでいるアプリケーションの名前です。

次に、appname_newspaperを使用して、ALTER TABLEテーブルにフィールドを手動で追加できます。 Djangoは移行をサポートしていないため、Djangoでこれを直接行う方法はわかりません。

18
Dominic Rodger

2015年の回答:

以下を実行します。

python manage.py makemigrations
python manage.py migrate
1
User