我有一些这样的 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 包装了创建子类的视图,但这似乎并没有解决问题。
这只是偶尔发生,但当它发生时,它会破坏我的用户网络应用程序。