Seite 1 von 1

Django ModelAdmin & callables

Verfasst: Samstag 7. September 2013, 23:24
von Mad-Marty
Hallo,

ich versuche mich derzeit an Django, was auch ganz gut klappt, aber ich kriege keine callables zum laufen.
Aufgerufen werden sie scheinbar (exception wenn was falsches drin steht), allerdings taucht das ergebnis nicht auf in der listview.
Statt einem Wert zeigt Django (leer) in der Alter spalte (echte Spalten sind gefüllt).
Wenigstens die Spalte heisst richtig, aber der Inhalt kommt nicht an.

Ich habe so ziemlich alle kombinationen probier, die callable in Admin.py, in models, etc.
Laut Beschreibung sollte das ja funktionieren! ( https://docs.djangoproject.com/en/dev/r ... st_display )
Wer hat einen Tip woran es liegt?

Admin.py

Code: Alles auswählen

class MemberAdmin(admin.ModelAdmin):
    fields = (
        'member_id',
        ('first_name', 'last_name', 'birth_date'),
        )

    list_display = ('first_name', 'last_name', 'birth_date', 'age')

    def age(self, obj):
        """ return the current age in years """
        today = datetime.date.today()
        delta = self.birthdate - today
        #return str(int(delta.days / 365.25))
        return "12"

    age.short_description = 'Alter'
    age.admin_order_field = 'birth_date'

Re: Django ModelAdmin & callables

Verfasst: Donnerstag 12. September 2013, 19:56
von Mad-Marty
Keiner eine idee woran's liegt?

:K :K :K

Re: Django ModelAdmin & callables

Verfasst: Donnerstag 12. September 2013, 20:58
von Whitie
Du musst auf obj.birthdate statt self.birthdate zugreifen. Wahrscheinlich erhälst du mit dem jetzigen Code einen AttributeError. Willst du nicht vielleicht auch today - obj.birthdate rechnen? Dann bekommst du das Alter als positive Zahl.

Gruß Whitie

Re: Django ModelAdmin & callables

Verfasst: Donnerstag 12. September 2013, 22:15
von Mad-Marty
Danke, für den Tip.

Es gibt eben keine Exception, die wird scheinbar irgendwo geschluckt.

Allerdings kommt in dem unten probierten test schonmal 17 im GUI an.
Ohne die fake-If True kommt wieder leer an ...
hab das ganze auch mal in ner shell probiert, sollte gehen.

Edit: Ja, jegliche exceptions werden einfach geschluckt und dann wird der wert mit (empty) ersetzt.
Jetzt gehts.

:)