Django模型继承和类型检查

时间:2010-08-09 07:16:10

标签: python django

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()

我的问题是,我如何理解机器型号的类型。对于instamce,我知道传入的查询是Machine模型的子项,但我也想知道它是Car子模型。

2 个答案:

答案 0 :(得分:20)

我不确定我是否理解你的问题。 如果 您正在尝试查找给定实例的类型,则可以使用内置的type函数。

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

或者,如果您想检查an_objectCar的实例,可以使用isinstance

isinstance(an_object, Car) # True

答案 1 :(得分:4)

仅当您获取调用Car类的对象时,isinstance才会起作用。 如果你做Machine.objects.all()以后想知道是否是一辆汽车,你可以做的是使用hasattr。像:

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