2016-04-17 32 views
1

ForeignKeyフィールドをモデルに追加する必要がありますが、makemigrationsはデフォルトを設定するエラーを返します。しかし、私はデフォルト値はありません。例えばDjangoはnullを許可しないフィールド(ForeignKey)を追加します

@python_2_unicode_compatible 
class Doctor(models.Model): 
    name = models.CharField(max_length=250) 
    surname = models.CharField(max_length=250) 
    middlename = models.CharField(max_length=250) 
    city = models.CharField(max_length=250) 
    specialization = models.ForeignKey('Specialization', blank=True) 

    def __str__(self): 
     return "%s %s" % (self.name, self.surname) 

@python_2_unicode_compatible 
class Specialization(models.Model): 
    name = models.CharField(max_length=250) 
    #spec_table_name = models.ForeignKey('SpecializationTable') 

    def __str__(self): 
     return self.name 

class Consultation(models.Model): 
    client_id = models.ForeignKey('Client') 
    doctor_id = models.ForeignKey('Doctor') 

    #how to dropdown from doctor 
    #record_id = models.ForeignKey(Specialization) 

@python_2_unicode_compatible 
class SpecializationTable(models.Model): 
    name = models.CharField(max_length=250) 

    def __str__(self): 
     return self.name 

class SpecializationTableRow(models.Model): 
    row_name = models.CharField(max_length=250) 
    row_description = models.CharField(max_length=999) 
    row_required = models.BooleanField() 
    table_name = models.ForeignKey(SpecializationTable) 

私はSpecializationForeignKeyのコメントを解除しようとしたとき、私はすでに持っているモデルであること - エラーがappers。すべての移行を削除して最初から開始すると、エラーは発生しません。

さらに、私は全くレコードがありません(クリーンなデータベース)。

このエラーをどのように伝え、\ create dbをゼロから削除するのですか?

+0

そのフィールドに 'blank = True'を指定します。 –

+0

@MuhammadShoaibしかし、誰もがDb - movetoneの 'null'フィールドを言った。フィールドを追加する必要がある場合は、「ヌル」がたくさんあるはずです。他の方法はありますか? – kAldown

答えて

0

djangoの観点からの問題は、Specializationモデルの既存のレコードとどう対処する必要があるかということです。それらのどれもないことを知ることはできません。

あなたが言うように、クリーンなデータベースをお持ちの場合、問題のモデルが作成されたポイントに移行を適用解除することができます。あなたが呼び出すことができる、のはSpecialization0003_*という移行で作成されたと仮定しましょう:

> python manage.py migrate <app_name> 0002 

が次にあなたが0003から始まるアプリですべての移行ファイルを削除することができます。その後、makemigrationsが再び動作します。それそれは0001で作成されている場合は、行う必要があります。

これは言われている
> python manage.py migrate <app_name> zero 

は、あなたがmakemigrations中に提供デフォルト値は(それが唯一のmigrate中に既存のレコードに適用されます)どのような方法で保存されていません。したがって、空のデータベースがある場合は、値(例:1)を入力しても効果はありません。

+0

私は 'ゼロ'について知らなかったことを除いて、ほとんど同じようにしました。しかし、想像してみて、私は制作に取り掛かっています。私はこのトリックをすることはできますか?私は「null」の値を持つフィールドを変えることも悪いpropとは思いません。私は完全に理解していないこの私のfaulアーキテクチャについてはよく考えていませんが、ちょっと、なぜ痛みのコストが低いソリューションはありません? – kAldown

+0

ここには痛みはありません。あなたが既にレコードを持っていて、ヌル値を設定できないフィールドを追加した場合、ある時点でそれらのレコードをどのような値にしたいかを決める必要があると想像してください。 – schwobaseggl

関連する問題