2010-05-09 111 views
3

我有兩個相關的模型(一對多)在我的Django應用程序,當我做這樣的事情保存相關的模型對象

ObjBlog = Blog() 
objBlog.name = 'test blog' 

objEntry1 = Entry() 
objEntry1.title = 'Entry one' 

objEntry2 = Entry() 
objEntry2.title = 'Entry Two' 

objBlog.entry_set.add(objEntry1) 
objBlog.entry_set.add(objEntry2) 

我得到它說「列空值錯誤,它違反了外鍵非空約束「。

我的模型對象都沒有保存。在設置條目之前,我是否必須保存「objBlog」?我希望我可以調用objBlog上的save方法來保存所有內容。

注:我沒有創建博客引擎,這只是一個例子。

+2

+1的注意。 :) – TelegramSam 2013-06-19 03:42:43

+0

這可能是信息https://docs.djangoproject.com/en/dev/ref/models/relations/#django.db.models.fields.related.RelatedManager.add – 2017-11-01 09:48:23

回答

0

我猜你的一個模型有一個不可空的外鍵字段。 當你做objBlog.entry_set.add(objEntry1) django調用每個對象的save()。

這是add方法的樣子:

def add(self, *objs): 
    for obj in objs: 
     if not isinstance(obj, self.model): 
      raise TypeError("'%s' instance expected" % self.model._meta.object_name) 
     setattr(obj, rel_field.name, instance) 
     obj.save() 
add.alters_data = True 
+0

所以我必須保存博客對象在我可以保存入口對象之前? – iJK 2010-05-09 18:44:29

+0

它會自動保存,您的模型看起來如何? Django可能會抱怨,因爲在其中一個或兩個都不能爲null的情況下,與其他'Blog'和'Entry'模型之間存在FK關係。實際回溯將有助於提供實際的幫助或至少實際的例外情況。 – 2010-05-09 20:41:30

+0

我必須先保存Blog對象。我想,我想Django會先保存Blog對象,然後保存Entry對象。當我說「保存」時,我做了objBlog.save(),然後我做了這個objBlog.entry_set.add(objEntry)。現在我知道我必須先保存父對象。 – iJK 2010-05-12 02:46:09