Python 如何判断django模型对象是否恰好是基类实例?

Python 如何判断django模型对象是否恰好是基类实例?,python,django,class,inheritance,model,Python,Django,Class,Inheritance,Model,我在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

我在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\u parent
table\u child

现在,我创建两个实例:

first_obj = ParentModel.objects.create(...) # id=1
second_obj = ChildModel.objects.create(...) # id=2
它将创建两个对象,这两个对象在
table\u parent
中总共插入了两行,在
table\u 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
此外,我可能有多个父模型的超类,我希望它能在这种情况下正常工作


我的努力:

class ParentModel(models.Model):

    ...

    def is_exact_base(self):
        try:
            child = self.childmodel
            return False
        except:
            return True

此方法可以工作,但冗余太多,我的问题是否有一个最佳实现?

您能提供一个完整的最小工作示例吗?我从来没有用过Django,我甚至不知道你想做什么

从python程序员的角度来看(对不起,我确信我并不是什么都懂),如果您想知道objectA是否是基类的实例,您需要的是:

isinstance(objectA, BaseInstance)
如果这不能应用到您的案例中,那么Python就没有办法区分这两者之间的区别。就像你做的那样:

def f(a, b):
    a.append(b)

def g(a, b):
    a.append(b)

a = []
f(a, 0)
g(a, 1)

>>> print(a)
[0, 1]
你完全没有办法知道哪个函数附加了什么


因此,如果您在这种情况下,您需要在表中添加一个新列,该列将包含该信息,或者您正在编写的对象应该包含该信息。

这是django的问题,因此我认为您的答案没有帮助,但可能没有人愿意回答。不管是不是Django,这是Python。Django不是一种会改变Python行为的插件:它只是一个构建在Python之上的Python模块。我所写的不是Django特定的,而是Python特定的,因此它也应该适用于Django。如果表中的“对象”只是原始数字,那么除了自己将这些信息写到某个地方之外,您无法了解它们是由什么编写的。如果您在表中放置的是序列化的类实例,那么您可以定义不同的类并使用
isinstance
。可能有Django的内置函数,但它们应该是我提供的两种方法中的一种。冗余太多是什么意思?@Jonathan我必须在模型类中手动定义一个函数,并在其中尝试一下。