2016-08-05 11 views
2

Lasst uns sagen, ich habe Modell wie folgt aus:Django Modelle, @property Dekorateur für die Methode

class Article(models.Model): 
    ... 

    def get_route(self): 
     ... 
     return data 

Wenn ich will Wert von get_route() in Admin-Panel zurück angezeigt I benutzerdefinierte Methode wie diese erstellen haben:

def list_display_get_route(self, obj): 
    return obj.get_route() 
list_display = ('list_display_get_route', ...) 

ich vor kurzem habe entdeckt, dass, wenn ich get_route() mit @property dekorieren es keine Notwendigkeit list_display_get_route() zu verwenden ist und die folgende funktioniert:

models.py

@property 
def get_route(self): 
    ... 
    return data 

admin.py

list_display = ('get_route', ...) 

Ist der richtige Ansatz? Gibt es irgendwelche Nachteile dieser Lösung?

Antwort

3

Die Verwendung von get_route in list_display sollte funktionieren, auch wenn Sie es nicht zu einer Eigenschaft machen.

class Article(models.Model): 

    def get_route(self): 
     ... 
     return data 

class ArticleAdmin(admin.ModelAdmin): 
    list_display = ('get_route', ...) 

Siehe list_display docs für die Liste der Werttypen unterstützt. Das vierte Beispiel, "eine Zeichenfolge, die ein Attribut für das Modell darstellt" entspricht Ihrer get_route-Methode.

Verwenden Sie die property Dekorateur ist in Ordnung, wenn Sie bevorzugen, aber in diesem Fall wäre es sinnvoller, es route zu nennen.

+0

Wow, vielleicht habe ich einen Tippfehler oder etwas gemacht, lange her und es staute sich in meinem Kopf, dass 'list_display' nicht mit den Methoden des Modells funktioniert. Danke, dass du meine Augen geöffnet hast! –