2015-05-20 120 views
0

我正在通過一些教程學習django,目前在effective-django教程中擁有所有權。不幸的是,這些教程是爲舊版本的django編寫的,所以有些東西稍有不同。django:不可空字段的默認值

我在models.py添加一個「所有者」字段時,我的模型跟遇到了問題:

from django.db import models 
from django.core.urlresolvers import reverse 
from django.contrib.auth.models import User 

class Contact(models.Model): 
    """ 
     Interface for contact class 
    """ 
    first_name = models.CharField(max_length=255) 
    last_name = models.CharField(max_length=255) 
    email = models.EmailField() 
    owner = models.ForeignKey(User) 

    def __str__(self): 
     return ' '.join([self.first_name, self.last_name]) 

    def get_absolute_url(self): 
     return reverse('contacts-view', kwargs={'pk': self.id}) 

當試圖運行「makemigrations」,我得到警告:

您嘗試添加不可爲空場「所有者」沒有默認聯繫:不能這樣做

這使得現有數據庫的意義,所以我嘗試沖洗ŧ他數據庫。但是,問題依然存在。現場所有者的默認值是什麼?我也嘗試讓字段爲空,但是這給了我字段所有者不能爲空的錯誤。

回答

1

我通常設置爲1。在這種情況下,已經存在的記錄將被分配給第一個用戶。

如果您希望稍後可以在下一次數據遷移中重新分配這些記錄。

+0

添加這確實解決了這個問題,這確實對後來添加的聯繫人是否有影響? – nluigi

+1

不,新添加的聯繫人不會有該字段的任何默認值。此值將僅設置爲遷移時數據庫中存在的記錄。 – catavaran

1

那麼,數據庫是否爲空並不重要。重要的是,您可能已經至少有一次首次創建模型的遷移,然後嘗試運行添加該字段的makemigrations

如果這些遷移對您來說不是太重要(我認爲它們不是因爲這是一個教程),只需刪除所有先前的遷移並運行新鮮的遷移。

或者,你就必須手動更改遷移,可能提供一個默認值等

+0

確定但當我刪除所有遷移並重置數據庫,我仍然收到警告'contacts_contact.owner_id可能不爲空' – nluigi