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

Meine Frage ist, wie kann ich verstehen, welcher Typ das Maschinenmodell ist. Für Instamce weiß ich, dass die eingehende Abfrage ein Kind des Maschinenmodells ist, aber ich möchte auch wissen, dass es ein Car-Submodell ist.Django Modellvererbung und Typprüfung

Antwort

11

Ich bin mir nicht sicher, ob ich Ihre Frage richtig verstehe. Wenn Sie versuchen, den Typ einer bestimmten Instanz herauszufinden, können Sie die eingebaute type Funktion verwenden.

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

Oder wenn Sie möchten, zu überprüfen, ob an_object eine Instanz von Car ist Sie isinstance verwenden können.

isinstance(an_object, Car) # True 
0

isinstance würde nur funktionieren, wenn Sie das Objekt den Aufruf der Car-Klasse geholt. Wenn Sie Machine.objects.all() und später wissen möchten, ob es sich um ein Auto handelt, können Sie hasattr verwenden. wie:

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