models.TimeField bei der Erfassung mit Sekunden bei der Ausgabe ohne Sekunden

Django, Flask, Bottle, WSGI, CGI…
Antworten
pythoner
User
Beiträge: 22
Registriert: Dienstag 8. September 2015, 19:58

Ich habe in meinem Projekt eine Erfassung von einer Zeit mit

models.TimeField(auto_now=False, auto_now_add=False, default="00:00:00", help_text="hh:mm:ss")

eingebaut. In der Erfassung kann ich Stunden, Minuten und Sekunden erfassen. Das steht dann auch so in der Datenbank darin.

Aber in der Ausgabe werden keine Sekunden angezeigt.

Wie kann ich das Format der Ausgabe anpassen und wieso ist das Format der Erfassung und der Ausgabe unterschiedlich?

In der Datei settings.py steht USE_L10N = True. Wenn ich das auf false setze ist die Ausgabe mit Vormittag und weiterhin keine Sekunden.
Danke und Gruß
Pythoner
Bolitho
User
Beiträge: 219
Registriert: Donnerstag 21. Juli 2011, 07:01
Wohnort: Stade / Hamburg
Kontaktdaten:

Da hilft dir der Template-Filter "time":
https://docs.djangoproject.com/en/3.1/r ... tins/#time

Und hier die Referenz:
https://docs.djangoproject.com/en/3.1/r ... specifiers

Code: Alles auswählen

{{ value|time:"H:i:s" }}
pythoner
User
Beiträge: 22
Registriert: Dienstag 8. September 2015, 19:58

Vielen Dank für Hilfe.
Folgendes steht nun in meiner html-Datei und löst das Problem wenn ich eine HTML-Datei für die Anzeige nutze.

Code: Alles auswählen

<td>{{ instance.result_value|time:"H:i:s" }}</td>
Gibt es auch eine Möglichkeit die Formatierung im Admin-Bereich anzupassen? Dort wird nämlich auch bei der Anzeige der Zeit die Sekunde abgeschnitten.
Danke und Gruß
Pythoner
Bolitho
User
Beiträge: 219
Registriert: Donnerstag 21. Juli 2011, 07:01
Wohnort: Stade / Hamburg
Kontaktdaten:

Ja, Du kannst das Feld im Formular überschreiben
https://docs.djangoproject.com/en/3.1/r ... _overrides

Formate:
https://docs.djangoproject.com/en/3.1/r ... ut-formats

z.B.

Code: Alles auswählen

#admin.py
from django.contrib import admin
from django.db import models

# Import our custom widget and our model from where they're defined
from myapp.models import MyModel

class MyModelAdmin(admin.ModelAdmin):
    formfield_overrides = {
        models.TimeField: {'widget': widgets.TimeInput(format='%H:%M:%S},
    }
(ungetestet - Antwort in Anlehnung an: https://stackoverflow.com/questions/482 ... -hour-time)
pythoner
User
Beiträge: 22
Registriert: Dienstag 8. September 2015, 19:58

Die Datenerfassung im Admin-Bereich ist automatisch mit Sekunden, aber bei der Anzeige der Daten im Admin-Bereich werden die Sekunden abgeschnitten.

Mit list_display gebe ich an, was angezeigt werden soll.

Code: Alles auswählen

class ResultAdmin(admin.ModelAdmin):
    list_display = ('result_value', 'distance_id', 'agegroup', 'member_id', 'event_id')
Hier sind zwei Screenshots:
https://github.com/ad-software/running_ ... /issues/23
Danke und Gruß
Pythoner
Bolitho
User
Beiträge: 219
Registriert: Donnerstag 21. Juli 2011, 07:01
Wohnort: Stade / Hamburg
Kontaktdaten:

na klar, das geht. Ich löse sowas immer über ein neues "Feld", dass ich im Admin mit einer kurzen Funktion definiere.

Code: Alles auswählen

from django.contrib import admin
from .models import Test

@admin.register(Test)
class TestAdmin(admin.ModelAdmin):

    def time_seconds(self, obj):
        return obj.time.strftime("%H:%M:%S")   # Das Feld im Model heißt 'time' in meinem Beispiel

    time_seconds.admin_order_field = 'time'
    time_seconds.short_description = 'Zeit'    

    list_display = ('time_seconds', )
pythoner
User
Beiträge: 22
Registriert: Dienstag 8. September 2015, 19:58

Klasse, vielen Dank.
Das ist ja einfach, wenn man es mal gesehen hat.
Danke und Gruß
Pythoner
Antworten