Django模型继承与类型检查

19 投票
2 回答
24986 浏览
提问于 2025-04-16 02:31
class Machine(models.Model):
    name= models.CharField( max_length=120)
    class Meta:
        abstract = True

class Car(Machine):
    speed = models.IntegerField()

class Computer(Machine)
    ram = models.IntegerField()

我的问题是,我怎么才能知道机器模型是什么类型的。例如,我知道传入的查询是机器模型的一个子类,但我也想知道它是汽车的一个子模型。

2 个回答

12

isinstance 这个函数只有在你获取了调用 Car 类的对象时才有效。如果你用 Machine.objects.all() 获取了所有的机器对象,然后想知道其中某个对象是不是车,你可以使用 hasattr 函数。比如:

o = Machine.objects.all()[0]
print(hasattr(o, 'car'))
29

我不太确定我是否理解你的问题。如果你想知道一个实例的类型,可以使用内置的 type 函数。

an_object = Car(name = "foo", speed = 80)
an_object.save()
type(an_object) # <class 'project.app.models.Car'>

或者,如果你想检查 an_object 是否是 Car 的一个实例,可以使用 isinstance

isinstance(an_object, Car) # True

撰写回答