Seite 1 von 1

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

Verfasst: Dienstag 22. Dezember 2020, 21:51
von pythoner
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.

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

Verfasst: Mittwoch 23. Dezember 2020, 09:45
von Bolitho
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" }}

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

Verfasst: Mittwoch 23. Dezember 2020, 12:36
von pythoner
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.

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

Verfasst: Mittwoch 23. Dezember 2020, 15:00
von Bolitho
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)

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

Verfasst: Mittwoch 23. Dezember 2020, 15:29
von pythoner
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

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

Verfasst: Mittwoch 23. Dezember 2020, 17:32
von Bolitho
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', )

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

Verfasst: Freitag 25. Dezember 2020, 12:43
von pythoner
Klasse, vielen Dank.
Das ist ja einfach, wenn man es mal gesehen hat.