2010-08-09 5 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 들어 들어오는 쿼리는 기계 모델의 자식이지만, 나는 그것이 Car 서브 모델이라는 것을 알고 싶다.Django 모델 상속 및 형식 검사

답변

11

귀하의 질문을 올바르게 이해하고 있는지 잘 모르겠습니다. 주어진 인스턴스의 유형을 찾으려는 경우 내장 된 type 기능을 사용할 수 있습니다.

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

또는 당신은 an_object 당신이 isinstance을 사용할 수 있습니다 Car의 인스턴스가 있는지 확인하고자하는 경우.

isinstance(an_object, Car) # True 
0

isinstance는 Car 클래스를 호출하는 개체를 가져온 경우에만 작동합니다. Machine.objects.all()을 수행하고 나중에 차가 있는지 알고 싶다면 hasattr을 사용하십시오. like :

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