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()
我的问题是,我怎么才能知道机器模型是什么类型的。例如,我知道传入的查询是机器模型的一个子类,但我也想知道它是汽车的一个子模型。
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