2013-06-24 93 views
2

我有一個使用我定義的User類很好地工作的應用程序。經過幾個星期的工作,我意識到我需要用戶身份驗證,並決定使用django的User類(我真的不明白這是如何工作的,因爲我對Django非常陌生)。我擺脫了我ForeignKey的關係到我的自定義用戶類,並增加了一個ForeignKey關係django.contrib.auth.models.User,但現在當我使用管理頁面中添加一個新的對象,我得到:Django IntegrityError 1452

Exception Type: IntegrityError at /admin/po/purchaseorder/add/ 
Exception Value: (1452, 'Cannot add or update a child row: a foreign key constraint fails (`po`.`po_purchaseorder`, CONSTRAINT `django_user_id_refs_id_fe5f38af` FOREIGN KEY (`django_user_id`) REFERENCES `auth_user` (`id`))') 

我真的不理解這個錯誤。下面是相關的類代碼:

from django.contrib.auth.models import User 

class PurchaseOrder(models.Model): 
    user=models.ForeignKey(User) 
    request_number = models.AutoField(primary_key=True) 
    #More fields 

誰能給我任何解釋這個錯誤,爲什麼我得到它,現在我使用的是內置的用戶,而不是我自己的類?

+0

您是否在更改'FK'類型後進行遷移? – karthikr

+0

不,我沒有。剛剛刪除數據庫並重新創建它(我正處於開發階段,因此沒有任何真正的數據需要擔心)。 –

+0

然後刪除數據庫模式並使用'syncdb'重新創建它。你可能會更好地瞭解'django-south'的工作方式,因爲它被廣泛用於處理syncdb – karthikr

回答

3

可能發生的情況是,您更新了models以包含Django的用戶定義,但尚未更新數據庫。

IntegrityErrors表示如果您執行查詢,某些約束將在數據庫中被違反。我確信更新數據庫模式 a.k.a python manage.py syncdb將做的伎倆。

如果您能夠刪除模式並重新創建,那麼可以解決它。如果不是,只需更新模型所代表的修改表。

希望這會有所幫助!

+0

的數據庫模式更改。這很奇怪,因爲我在測試更改之前刪除了數據庫並重新創建了它(並且執行了syncdb),但這正是問題所在。謝謝! –

+0

我很高興它的工作:)考慮使用'django south'進行遷移。這是第一次得到它有點困難,但一旦你得到它是非常方便的:) –