【问题标题】:Django model object's construction fails silentlyDjango 模型对象的构造静默失败
【发布时间】:2012-03-28 09:39:37
【问题描述】:

我有一段很明显的代码失败了:

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

问题是在那之后,temp 被设置为None!我没有回溯,没有错误消息 - 它只是不起作用并离开Nonerequired_fieldNs (for N=1|2)MyModel 中唯一的必填字段。 AnotherModelYetAnotherModel 的对象存在。有谁知道为什么它不能像我想的那样工作(我的意思是它没有构造一个由 temp 引用的新对象)。我不能在这里粘贴我所有的实际代码,因为它是一个公司项目,但如果有疑问 - 请询问,我可能会解释更多。 编辑: 好的,我知道它为什么会失败,问题是我试图从那个新构造的对象中调用一个方法,它导致它以这种奇怪的方式崩溃。这个话题现在可以关闭了。

【问题讨论】:

  • 您是否尝试过将声明拆分成多个部分,并逐步检查一切是否正常?因此,在创建模型实例之前进行 ORM 查找(并打印关于它们中的每一个的内容,以便您知道它有效)。如果做不到这一点,您的确切代码是否在manage.py shell REPL 中失败?
  • 是的,它在 manage.py shell 中收支平衡

标签: python django model


【解决方案1】:

除非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,
)

【讨论】:

  • 那是什么?它不是标准的 django 字段类型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-05
  • 2019-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-06
相关资源
最近更新 更多