2016-05-03 8 views
1

私は既にOneToOneFieldとUser-modelで独自のモデルを作成しています。今、そのモデルにフィールドを追加しますが、manage.py makemigrationsmigrateを実行しても、私はmodels.pyに変更を加えません。既存のモデルにフィールドを追加することはDjangoでは機能しません

models.py

class UserDetails(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE,) 
    footsize = models.CharField(max_length=10) 
    headsize = models.CharField(max_length=10) 

    handsize = models.CharField(max_length=100) #field what I want to add 

    def __str__(self): 
     return u'%s %s %s' % (self.id, self.footsize, self.headsize) 

私は貝にhandsizeに値を追加しようとすると、私はhandsizeフィールドが存在しないというエラーが出ます。どうしたの?

+0

これはこのアプリの最初の移行ですか? – Sayse

+0

'installed_apps'のdjango設定でアプリを追加しましたか? – r3ign

+0

@ r3ignはい、私は – MMakela

答えて

2

私は私のバックアップで私の質問と同じことをすることをテストしました。ターミナルショーmakemigrationsをやって、このメッセージを、:

You are trying to add a non-nullable field 'handsize' to userdetails without a default; we can't do that (the database needs something to populate existing rows). 
Please select a fix: 
1) Provide a one-off default now (will be set on all existing rows) 
2) Quit, and let me add a default in models.py 
Select an option: 

私は)私が1で先に答えたことを、確信しているので、フィールドがデータベースに示さなかった理由です。だから、今、私は2を答え)とフィールドにデフォルト値を追加しました:

handsize = models.CharField(max_length=10, default='40') 

migrate作品や、データベースに新しいフィールドとして追加されますhandsize。

0

すでにモデルを作成していると言われたときは、最初のマイグレーションを実行したと仮定します。したがって、新しいフィールドを配置した後に再度移行を実行する場合、ブランケット移行を実行することはできません。あなたはmakemigrations後にアプリ名を指定する必要があります。このようなもの。

./manage.py makemigrations app_name 

./manage.py migrate. 

は動作するはずです。

関連する問題