2010-08-09 104 views
6
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模型继承和类型检查

回答

11

我不知道我是否正确理解你的问题。 如果您试图找出给定实例的类型,您可以使用内置的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 
0

isinstance只有在您获取调用Car类的对象时才有效。 如果你做了Machine.objects.all(),后来想知道如果是汽车,你可以做的就是使用hasattr。如:

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