2017-09-05 115 views
1

在Django中我用下面的models.py文件manage.py makemigrationsmanage.py migrate不可爲空場:Django的:沒有默認

class Family(models.Model): 
    comment1 = models.CharField(max_length=80) 
    #comment2 = models.CharField(max_length=80) 

這個初始化成功後,我改變了models.py到(我只是取消註釋這基本上是其他模型場的副本)的新模式場:

class Family(models.Model): 
    comment1 = models.CharField(max_length=80) 
    comment2 = models.CharField(max_length=80) 

現在,當我嘗試makemigrations我再次碰到下面的錯誤

您嘗試添加不可爲空場「註釋」家庭不 默認;我們不能這樣做(數據庫需要一些東西來填充 現有的行)。

請選擇修復:

1)提供一次性默認現在 (將所有現有的行與空值此列集)

2)退出,並讓我在models.py中添加一個默認值選擇一個選項:

爲什麼我在初始化初始化時沒有得到這個錯誤?

+1

因爲您是從頭開始創建表。現在,正如錯誤明確指出的那樣,數據庫需要一些東西來填充現有的行。 –

+0

但沒有現有的行。就像我初始化時一樣! – user3182532

+0

好吧我想我明白了。儘管沒有現有的行,原則上可能存在。然後Django不知道如何保存現有行的「comment2」,因爲它不能將它們保存爲null,並且它們沒有值。在Django知道的第一次遷移中:我創建了一個表,因此沒有以前的數據,因此null = False +沒有默認值是可以的。用戶將只能保存具有「comment1」值的對象,但這是他的問題。 – user3182532

回答

0

您需要提供默認或允許它使用空空白,怎麼也有不具備註釋2以前的數據。

comment2 = models.CharField(max_length=80,null=True,default='hi') 

或者

comment2 = models.CharField(max_length=80,null=True,blank=True) 
+0

以前沒有數據,數據庫是空的! – user3182532

+0

但是,您首先進行了遷移並僅使用comment1進行遷移,然後再次使用comment1和comment2,這可能是原因。 –

+0

但是,以任何方式提供默認值都是很好的做法。 –

0

如果你想讓它不爲空的,但沒有默認。 當您創建遷移文件時,您必須爲同一字段提供值。這就是爲什麼它要求選擇。在python manage.py makemigrations中輸入「1」,然後爲先前保存的行(如果有)提供一個值。

讓我知道這是否有幫助。

0

其他都是對的。你應該爲該字段設置一個默認值。 但有一個技巧,你可以解決這個問題。但這不是一個好方法......只有當你沒有選擇時。
1.評論所有表
2.運行makemigrationsmigrate
3.取消註釋你的表
4.2。運行makemigrationsmigrate再次