Summen in Queryset bilden und an Template übergeben
- __blackjack__
- User
- Beiträge: 13931
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Pitwheazle: Du willst ja auch kein `datetime`-Objekt sondern ein `timedelta`-Objekt. Warum kannst Du das nicht erstellen?
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
-
- User
- Beiträge: 1050
- Registriert: Sonntag 19. September 2021, 09:40
Ich habe es jetzt mit
hinbekommen. Zeit ohne Jahr scheint es nicht zu geben. Geht prima - Danke!
Code: Alles auswählen
gesamtzeit = datetime(1970,1,1,0,0,0)
- __blackjack__
- User
- Beiträge: 13931
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Pitwheazle: Doch es gibt Objekte für Zeitspannen, die heissen `datetime.timedelta` und die hast Du ja zum aufaddieren, da musst Du einfach eines mit dem Wert 0 als Anfangswert erstellen. Ein Datum (mit Zeit) ist keine `gesamtzeit` sondern immer nur ein Zeit*punkt*.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
-
- User
- Beiträge: 1050
- Registriert: Sonntag 19. September 2021, 09:40
Also wahrscheinlich bin ich da wieder zu blöd zu. Mir ist schon klar, dass ein Datum mit Zeit keine Zeitspanne darstellt. Ich finde aber bei meiner Suche immer nur Beispiele wie man mit datetime.timedelta zu einem Zeitpunkt Werte addiert oder subtrahiert aber keine Möglichkeit, mit timedelta eine Zeitspanne auf Null zu setzen.__blackjack__ hat geschrieben: ↑Freitag 21. Juli 2023, 17:28 @Pitwheazle: Doch es gibt Objekte für Zeitspannen, die heissen `datetime.timedelta` und die hast Du ja zum aufaddieren, da musst Du einfach eines mit dem Wert 0 als Anfangswert erstellen. Ein Datum (mit Zeit) ist keine `gesamtzeit` sondern immer nur ein Zeit*punkt*.
- __blackjack__
- User
- Beiträge: 13931
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Pitwheazle: Dann hör mal auf zu suchen und *denke*. Wie könnte man das denn wohl machen. Ich fasse es nicht das Du das nicht hinbekommst. Wie erstellt man ein `timedelta`-Objekt? Was muss man da übergeben? Welchen Wert muss man da übergeben wenn man 0 haben will? So dämlich kann man sich doch eigentlich gar nicht anstellen. Sorry, aber ich fasse das gerade echt so *gar nicht*. 
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
- noisefloor
- User
- Beiträge: 4157
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
wo und wie suchst du? Bei Sachen zur Standardbibliothek macht es IMHO immer Sinn, zuerst die zugehörige Doku von Python zu lassen. Und da steht direkt am Anfang, dass ein timedelta-Objekt per Default auf Null (0) initialisiert wird.
Beispiel:
Gruß, noisefloor
wo und wie suchst du? Bei Sachen zur Standardbibliothek macht es IMHO immer Sinn, zuerst die zugehörige Doku von Python zu lassen. Und da steht direkt am Anfang, dass ein timedelta-Objekt per Default auf Null (0) initialisiert wird.
Beispiel:
Code: Alles auswählen
>>> import datetime
>>> now = datetime.datetime.now()
>>> now
datetime.datetime(2023, 7, 22, 16, 13, 56, 309920)
>>> delta = datetime.timedelta()
>>> delta
datetime.timedelta(0)
>>> now + delta
datetime.datetime(2023, 7, 22, 16, 13, 56, 309920)
>>> delta2 = datetime.timedelta(seconds=3600)
>>> delta2
datetime.timedelta(seconds=3600)
>>> now + delta2
datetime.datetime(2023, 7, 22, 17, 13, 56, 309920)
>>>
-
- User
- Beiträge: 1050
- Registriert: Sonntag 19. September 2021, 09:40
Vielleicht bin ich ja wirklich zu blöd. Dieses und auch andere Beispiele habe ich gelesen. Hier wird aber doch, wie ich es auch in meinem Programm gemacht habe, zu einem Zeitpunkt (now) jeweils ein Timedalta addiert. Mein Code
und das gebe ich weiter ans Template mit
(stimmt "Gesamtzeit" ist nicht wirklich ein Zeitraum - speichert aber für mich den Zeitraum)... stehe ich da wieder auf dem Schlauch?
gesamtzeit = datetime.timedelta(0) geht jedenfalls nicht und ist ja so auch nicht vorgesehen.
Code: Alles auswählen
gesamtzeit = datetime(1970,1,1,0,0,0)
....
dauer = g['zeit_sum']
seconds = int(dauer.total_seconds())
mm = int(seconds/60)
hh, mm = divmod(mm, 60)
dauer_text = f"{hh}:{mm:02d}"
gesamtzeit = gesamtzeit + dauer
...
gesamtzeit = gesamtzeit + dauer
Code: Alles auswählen
'gesamtzeit': gesamtzeit.time()
gesamtzeit = datetime.timedelta(0) geht jedenfalls nicht und ist ja so auch nicht vorgesehen.
- __blackjack__
- User
- Beiträge: 13931
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Pitwheazle: Warum sollte das nicht gehen? Und was ist daran nicht vorgesehen?
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
-
- User
- Beiträge: 1050
- Registriert: Sonntag 19. September 2021, 09:40
Was mache ich falsch:
Bei mir erzeugt
die Fehlermeldung:
Bei mir erzeugt
Code: Alles auswählen
from datetime import date, datetime, timedelta
gesamtzeit = datetime.timedelta()
Code: Alles auswählen
type object 'datetime.datetime' has no attribute 'timedelta'
Das ist eine Stolperstelle des datetime-Moduls, weil die Klasse genau gleich geschrieben wird.
Aber Du importierst doch schon timedelta:
Aber Du importierst doch schon timedelta:
Code: Alles auswählen
gesamtzeit = timedelta()
-
- User
- Beiträge: 1050
- Registriert: Sonntag 19. September 2021, 09:40
Mann, mann, mann da muss man erst mal drauf kommen! Vielen Dank mal wieder dafür!