2012-10-16 6 views
9

Ich versuche, die Dokumente-Eigenschaft in einer allgemeinen Funktion zu erhalten, aber einige Modelle möglicherweise nicht das Attribut Dokumente. Gibt es eine Möglichkeit, zuerst zu überprüfen, ob ein Modell die Eigenschaft documents hat, und Code dann bedingt auszuführen?Django wie überprüft man, ob das Objekt eine Eigenschaft in Sicht hat

if self.model has property documents: 
     context['documents'] = self.get_object().documents.() 
+0

Warum verwenden Sie jemals ein Modell, das es nicht dort hat? –

+0

Ich habe eine generische Ansicht, die alle Modelle in einer einzelnen Vorlage anzeigt. Anfangs hatte ich keine Dokumente, aber nur wenige von ihnen haben Dokumente beigefügt. also dachte ich, wenn es einen Weg gibt, um zu überprüfen, muss ich die neue Ansicht mit 90% gleichen Code definieren. Für hashish Lösung habe ich eine Funktion mit try und except so gemacht, dass ich keinen Fehler in der Seite bekomme, aber nach dem richtigen Weg suchte. – user825904

+0

Warum soll das Modell nicht sagen welche Ansicht es benutzen soll, mit einem vernünftigen Standard? –

Antwort

24

können Sie hasattr() verwenden, um zu prüfen, ob Modell, um die Dokumente Eigenschaft hat.

if hasattr(self.model, 'documents'): 
    doStuff(self.model.documents) 

jedoch this answer weist darauf hin, dass einige Leute die „leichter zu bitten um Vergebung als Erlaubnis“ -Ansatz besser fühlen Praxis ist.

try: 
    doStuff(self.model.documents) 
except AttributeError: 
    otherStuff() 
Verwandte Themen