ユーザー数が少ない小さな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
モデルに変更します。ユーザープロファイルを壊すことはありません。
何か案は?
これを行う組み込みの方法はありません。しかし、あなたのためにそれを行うサードパーティのプロジェクトがいくつかあります。主要な2つは South および Django-evolution と呼ばれますが、他にもさまざまなものがあります(私が関わってきたものを含む)。
私は間違いなくサウスをお勧めします-それは多くの本当にきちんとした機能があり、本当にうまく機能します。
以下を使用して、新しいフィールドのSQLを取得してみることができます。
manage.py sql appname
ここで、appname
は新聞クラスが住んでいるアプリケーションの名前です。
次に、appname_newspaper
を使用して、ALTER TABLE
テーブルにフィールドを手動で追加できます。 Djangoは移行をサポートしていないため、Djangoでこれを直接行う方法はわかりません。
2015年の回答:
以下を実行します。
python manage.py makemigrations
python manage.py migrate