Filtern in der Datenbank erledigen

Django, Flask, Bottle, WSGI, CGI…
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

So, im großen und ganzen funktioniert das jetzt. Aber das mit dem default im Zeitstempelgefällt mir immer noch nicht:
Wenn der User eine neue Kategorie anfängt wird eine neue Zähler-Instanz erzeugt:

Code: Alles auswählen

 zaehler, created = Zaehler.objects.get_or_create(user = user, kategorie = kategorie)
... hier wrd ja beim Erzeugen wohl der defaultwert eingetragen ("datetime(2023, 8, 1, 0, 0, 0, 0)"), das erzeugt zunächst eine Meldung, dass der Zeitstempel "naiv" ist (kennen wir ja schon).
Und dann muss ich ja mit:

Code: Alles auswählen

            if created:
                zaehler.fehler_ab = timezone.now()
                zaehler.save()
das aktuelle Datum eintragen. Da brauche ich das default ja eigentlich nicht. Kann ich schon beim Erzeugen die aktuelle Zeit eintragen ohne dass zunächst der Defaultwert eingetragen wird? Oder gibt es eine andere Möglichkeit: Ich könnte ja den Defaultwert rausnehmen (den brauche ich ja eh nur jetzt bei der Umstellung auf die neue Fehlerzählweise) und in den "alten" Zähleren per

Code: Alles auswählen

 1) Provide a one-off default now which will be set on all existing rows
diesen einsetzen - kann ich da einfach "datetime(2023, 8, 1, 0, 0, 0, 0)" eingeben?

Ach ja, und nochmals die Frage:
Bei meinem Rumprobieren und Feld ändern und zurückändern gibt es ja immer einen neuen Eintrag in migrations, kann man da das hin und zurück rauslöschen? ... oder noch grundlegender: Wenn ich die Einträge alle lösche, werden die alle neu erzeugt, wenn ich makmigration.py aufrufe?
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

Ach ja und das gleiche Problem taucht jetzt an anderer Stelle nochmal auf:
Für das anstehende neue Schulhalbjahr muss ich sicherstellen, dass bekannt ist, wann eine Lerngruppe angelegt wurde. Wenn eine Lehrkraft also eine neue Lerngruppe anlegt, muss der aktuelle Tag eingetragen werden. Wenn ich jetzt in meinem model "Lerngruppe"

Code: Alles auswählen

ab = models.DateTimeField
ergänze, muss ich ja für die bestehenden Lerngruppen etwas eintragen. Das könnte eigentlich wieder der 1.8.2023 sein.
Sehe ich das richtig, dass ich das bei makemigrations dann bei

Code: Alles auswählen

Provide a one-off default now which will be set on all existing rows
eintragen könnte? Aber wie?
Es wäre sehr schön, wenn mir jemand (für Dummies) jetzt an diesem Beispiel das aufzeigen könnte.
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

Gebt euch bitte keine Mühe. Ich habe das zwischenzeitlich anders gelöst:
Ich hatte zum Glück vor diesen ganzen Zeitstempeln eine Kopie meines Programmordners gemacht. In diesen habe ich meine Änderungen kopiert und die beiden Zeitstempel auf "auto_now_add=True" gesetzt. Dann habe ich bei der entsprecheneden Frage nach einem Wert in den bestehenden Daten "datetime.date(2023,8,1)" eingegeben. jetzt bekomme ich keine Hinweise auf "naive" Zeiten und die neuen Daten werden mit dem aktuellen Datum und der aktuellen Zeit erzeugt und das scheint prima zu klappen.
(Hoffentlic!)
Antworten