0

我有一些这样的 Django 模型:

CLASS_TYPE_CHOICES = (('type1', 'Type 1'), ('type2', 'Type 2'))

class Parent(models.Model):
  class_type = models.CharField(max_length=10, choices=CLASS_TYPE_CHOICES)

  def get(self):
    if self.class_type == 'type1':
      return self.child1
    elif self.class_type == 'type2':
      return self.child2
    else:
      return self

class Child1(Parent):
  ...

class Child2(Parent):
  ...

所以想法是,当我们有一个 Parent 类型的实例时,我们可以通过使用 class_type 属性找出关联的子类并获取子类的实例。这多年来一直运行良好,但在过去的几周里,我一直看到 parent.get() 抛出异常的间歇性错误,因为没有关联的子类。确切的错误消息是“Parent has no child1”。代码中没有我创建原始 Parent 实例的地方。最近几周我将 Django 从 1.3 升级到 1.6,但我不确定这会如何破坏这段代码。

我有一个想法,也许查询在中途失败,因此数据库正在创建父记录,而没有机会完成创建子记录。所以我用@transaction.atomic 包装了创建子类​​的视图,但这似乎并没有解决问题。

这只是偶尔发生,但当它发生时,它会破坏我的用户网络应用程序。

4

0 回答 0