【发布时间】:2014-08-25 14:50:11
【问题描述】:
我在 django 中有一个 ParentModel 模型:
class ParentModel(models.Model):
field_a = models.IntegerField()
field_b = models.IntegerField()
class Meta:
db_table = 'table_parent'
然后我定义了一个超类ChildModel:
class ChildModel(ParentModel):
field_c = models.IntegerField()
class Meta:
db_table = 'table_child'
上面将在我的数据库中创建两个表,我们称之为table_parent 和table_child。
所以,现在我创建两个实例:
first_obj = ParentModel.objects.create(...) # id=1
second_obj = ChildModel.objects.create(...) # id=2
它会创建两个对象,在table_parent中插入两行,在table_child中插入一行。
现在,如果我获取实例,但都从 ParentModel 创建:
first_obj = ParentModel.objects.get(id=1) # id=1
second_obj = ParentModel.objects.create(id=2) # id=2
所以,事实上,second_obj 是一个 ChildModel 实例。我想要一种简洁的方式来判断它,比如:
first_obj.is_exact_base() # I want it to be True
second_obj.is_exact_base() # I want it to be False
更多,我可能有不止一个ParentModel 的超级类,我希望它能够在这种情况下正常工作。
我的努力:
class ParentModel(models.Model):
...
def is_exact_base(self):
try:
child = self.childmodel
return False
except:
return True
这个方法可以,但是冗余太多,有没有最好的实现我的问题?
【问题讨论】:
-
冗余过多是什么意思?
-
@Jonathan 我必须在模型类中手动定义一个函数,并在其中包含一个 try-except。
标签: python django class inheritance model