Django模型继承和类型检查

Hel*_*nar 11 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()
Run Code Online (Sandbox Code Playgroud)

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

Man*_*dan 20

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

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

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

isinstance(an_object, Car) # True
Run Code Online (Sandbox Code Playgroud)


mcn*_*iac 5

仅当您获取调用Car类的对象时,isinstance才起作用。如果您执行Machine.objects.all(),然后又想知道它是否是汽车,则可以使用hasattr。喜欢:

o = Machine.objects.all()[0]
print(hasattr(o, 'car'))
Run Code Online (Sandbox Code Playgroud)