2010-08-09 11 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() 

Mi pregunta es, ¿cómo puedo entender qué tipo es el modelo de la máquina. Por ejemplo, sé que la consulta entrante es un elemento secundario del modelo de máquina, pero también quiero saber que es un submodelo de automóvil.Django modelo de herencia y verificación de tipo

Respuesta

11

No estoy seguro si entiendo su pregunta correctamente. Si está tratando de encontrar el tipo de una instancia determinada, puede usar la función incorporada type.

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

O si se desea comprobar si an_object es una instancia de Car puede utilizar isinstance.

isinstance(an_object, Car) # True 
0

isinstance funcionaría solo si ha buscado el objeto que llama a la clase Car. si haces Machine.objects.all() y luego quieres saber si es un auto, lo que puedes hacer es usar hasattr. como:

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