2012-03-11 28 views
1

我有相当明显的一段代码失败:Django的模型对象的构造失败默默

temp = MyModel(
    required_field1 = AnotherModel.objects.filter(name="example1")[0], 
    required_field2 = YetAnotherModel.objects.filter(name="example2")[0], 
) 

的问题是,在此之后,临时设置为None!我没有追踪,没有错误信息 - 它只是不起作用,并离开Nonerequired_fieldNs (for N=1|2)MyModel中唯一的必填字段。对象​​和YetAnotherModel存在。有没有人有任何想法,为什么它不工作,因为我想(我的意思是它不构建一个新的对象,由临时引用)。我不能在这里粘贴我所有的实际代码,因为这是一个公司项目,但如果有疑问 - 请问,我可以解释一下更多。 编辑: 好吧,我想通了它为什么失败,问题是我试图从该新构造的对象调用一个方法,并导致它以这种奇怪的方式崩溃。此主题现在可以关闭。

+3

您是否尝试过打破声明了成片,并检查一切正常一步一步?因此,在创建模型实例之前,执行两次ORM查找(并打印每个关于它们的信息,以便知道它的工作原理)。否则,你的确切代码在'manage.py shell' REPL中失败了吗? – 2012-03-11 22:45:06

+0

是的,它甚至在manage.py shell中保持稳定 – 2012-03-12 08:11:48

回答

0

除非required_field1required_field2是外键,否则上述代码将不起作用。

你确定你不是这个意思:

temp = MyModel(
    required_field1 = unicode(AnotherModel.objects.filter(name="example1")[0]), 
    required_field2 = unicode(YetAnotherModel.objects.filter(name="example2")[0]), 
) 

或者:

temp = MyModel(
    required_field1 = AnotherModel.objects.filter(name="example1")[0].some_field, 
    required_field2 = YetAnotherModel.objects.filter(name="example2")[0].some_field, 
) 
+0

它们是ReferenceFields – 2012-03-12 08:11:08

+0

那是什么?它不是标准的Django字段类型。 – 2012-03-12 10:14:31

+0

这是来自MongoDB的DBRef – 2012-03-12 15:35:12