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子模型。Django模型继承和类型检查
答
我不知道我是否正确理解你的问题。 如果您试图找出给定实例的类型,您可以使用内置的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
答
isinstance只有在您获取调用Car类的对象时才有效。 如果你做了Machine.objects.all(),后来想知道如果是汽车,你可以做的就是使用hasattr。如:
o = Machine.objects.all()[0]
print(hasattr(o, 'car'))