2016-06-16 13 views
2

でデフォルトを要求します:「makemigrations」私は単純なモデルの継承をしようとしていなし、抽象モデルの継承

class Product(models.Model): 
    creation_date = models.DateTimeField(auto_now_add=True) 

class Application(Product): 
    name = models.CharField(max_length=200) 

「makemigrationsは、」デフォルトを要求します:

あなたがしようとしています既定値なしで アプリケーションにnullableでないフィールド 'product_ptr'を追加します。これを行うことはできません(データベースには既存の行を移入するために何かが必要です)。

私はhereその私ができる人気商品のMetaクラスと抽象モデルを見ましたが、私は実際のモデルとして、他のモデルでは、具体的にそれをrefereingてるので、私はそれを行うことはできません。

class Comment(models.Model): 
    product  = models.ForeignKey('Product', related_name="comments") 

データベースを削除したときに 'makemigrations'を実行しても、同じ問題が発生します。

私は何でもできますか?

Djangoの1.9

+0

この名前= models.CharField(max_length = 200、default = 'Blah')に変更してもう一度やり直してください –

+0

アプリケーションは既に存在し、それをProductのサブクラスに移していますか? –

答えて

2

あなたは正確にあなたが行った変更が何であるかを説明していない、あなたがそれが以前にmodels.Modelから継承Productを継承するためにあなたのApplicationモデルを変更したようです。これにより、djangoはシーンの裏側に1対1のマッピングを作成します。 https://docs.djangoproject.com/en/1.9/topics/db/models/#multi-table-inheritance

継承関係を自動的に経由して子モデル とその両親のそれぞれ(の間のリンクを紹介します:あなた自身が絵

REF入りモデルに追加しませんでしたproduct_ptrの追加-created OneToOneField)。

それは、このフィールドは一意である必要があるため、移行時にデータを持つテーブルにこのフィールドを追加するには少しトリッキーです。あなたが単にApplicationという名前の新しいモデルを作成しているのであれば、値1は大丈夫でしょう。

+0

ありがとう!古いマイグレーションファイルを削除することはトリックをやっているようでした(少なくともマイグレーションワイズ) – billy

+0

これは、これが私が思う新しいモデルとして扱われることになります – e4c5

関連する問題