2010-05-09 112 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