Django模型继承和类型检查

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

我的问题是,我该如何理解 Machine 模型的类型。例如,我知道传入的查询是 Machine 模型的子模型,但我还想知道它是否是 Car 子模型。

2个回答

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

12

如果您使用 Car 类调用对象,则 isinstance 可以正常工作。如果您使用 Machine.objects.all(),然后想知道它是否为汽车,则可以使用 hasattr,例如:

如果你想要判断一个在 Machine 对象集中的对象是否是 Car 类型的,用 isinstance 不行,只能用 hasattr。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接