2011-08-03 25 views
1

我收到一個錯誤,我不明白Django 1.3有關對象成員爲null的錯誤。該成員不是一個領域,它是一個領域的ID。Django模型 - field_id是None,即使字段不是None,結果得到錯誤

這是代碼。

模型:

class DirectorsIndividual(models.Model): 
    company = models.ForeignKey(CompanyUK) 
    director = models.ForeignKey(Director) 
    individual = models.ForeignKey(Individual) 

錯誤:

IntegrityError: mainapp_directorsindividual.director_id may not be NULL 

創建該對象的代碼:

link = DirectorsIndividual(company = co, 
          individual = individual, 
          director = officer) 

對象(略不相干的領域)的狀態:

link.director => <Director: Director object> 
link.director_id => None 
link.director.id => 3 
link.individual => <Individual: Individual object> 
link.individual.id => 2 

這裏發生了什麼?爲什麼董事個人對象沒有拿起分配給它的董事對象的ID?

[編輯:多個對象信息]

+0

你肯定individual'實際上指的是什麼變量'? –

+0

對不起,誤解了這個問題。 –

+0

正確的方法來處理這個問題在這裏:http://stackoverflow.com/questions/6932006/django-deferring-save-of-graph-of-model-objects-transactionally-create-models – Marcin

回答

1

仔細檢查您在其中分配和保存對象的順序。這裏有一個超精簡例如:

from django.db import models 

class X(models.Model): 
    name = models.CharField(max_length=80) 

class Y(models.Model): 
    x = models.ForeignKey(X) 

這將導致完整性違規:

x = X() 
y = Y() 

x.name = 'test' 
y.x = x # At this moment, the pk has not yet been assigned. 

x.save() # Assigns the pk, but doesn't copy it over to the foreign key in y. 
y.save() # Bang. 
+0

是的,這就是它。是否有建議的模式用於創建對象圖形,然後在創建圖形後將其全部保存? – Marcin

+0

或者,還有一個很好的期貨/承諾庫嗎? – Marcin

+0

我通常會採用「保存早期和經常」的方法,一旦創建它們就會保存每個新對象。 corurse,這不會幫助循環依賴,但一個圓形的FK關係是非常罕見的。 – Christophe

相關問題