[PYTHON] Vorsichtsmaßnahmen beim Hinzufügen von Elementen mit DateField zu einem vorhandenen Modell später in Django

Einführung

Während der Entwicklung habe ich gelernt, dass beim späteren Hinzufügen von Elementen zu einem vorhandenen Modell eine kleine Operation erforderlich ist, und habe dieses Wissen zusammengefasst.

Bestehendes Modell

Nehmen wir zur Vereinfachung zunächst an, Sie haben ein einfaches Modell wie dieses:

class NameModel(models.Model):
    name = models.CharField(max_length=50)

    def __str__(self):
        return self.name

Fügen Sie hier ein Element mit DateField () hinzu.

Artikelzusatz

Fügen Sie Elemente wie unten gezeigt hinzu.

class NameModel(models.Model):
    name = models.CharField(max_length=50)
    date = models.DateField() #hinzufügen

    def __str__(self):
        return self.name

Ich habe das Modell geändert, daher werde ich es migrieren.

$ python manage.py makemigrations

Zu diesem Zeitpunkt wird eine Meldung ähnlich der folgenden angezeigt.

You are trying to add a non-nullable field 'date' to NameModel without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:
 1) Provide a one-off default now (will be set on all existing rows with a null value for this column)
 2) Quit, and let me add a default in models.py
Select an option:

Diese Meldung bedeutet, dass ich versuche, ein Nulldatum hinzuzufügen, dies jedoch nicht kann. Ich muss zwischen zwei Optionen wählen, um das Problem zu beheben.

Dies wird durch die Tatsache verursacht, dass das Element "Datum" nicht vorhanden ist, um die Originaldaten einzugeben, sodass der Inhalt null geworden ist.

Da 2) eine Option zum Neuerstellen des Modells ist, wählen wir hier 1) aus.

Dann

Please enter the default value now, as valid Python
The datetime and django.utils.timezone modules are available, so you can do e.g. timezone.now
Type 'exit' to exit this prompt
>>> 

Es wird angezeigt. Was bedeutet das für ein Datum? Also fügen wir hier timezone.now gemäß den Anweisungen hinzu.

das ist alles.

Dies kann auch vermieden werden, indem im Argument von "DateField" "null = True" gesetzt wird.

Wenn Sie Probleme haben, lassen Sie es uns bitte wissen.

Recommended Posts

Vorsichtsmaßnahmen beim Hinzufügen von Elementen mit DateField zu einem vorhandenen Modell später in Django
Erstellen Sie mit Django ein benutzerfreundliches Folgemodell mit ManyToManyField through
Vorsichtsmaßnahmen bei der Verwendung von Pit mit Python
[Hinweis] Zu überprüfende Punkte, wenn in pyenv eine Endlosschleife auftritt
Einstellungen beim Hinzufügen einer Festplatte unter Linux
Vorsichtsmaßnahmen bei Verwendung der for-Anweisung in Pandas
Seien Sie vorsichtig, wenn Sie einem Array ein Array hinzufügen
Wenn Sie den Wert mithilfe von Auswahlmöglichkeiten in der Vorlage im Django-Modell anzeigen möchten
Hinweise zum Hinzufügen von Setter und Deleter in einer abgeleiteten Klasse zur getter-Eigenschaft der Basisklasse
So erhalten Sie mehrere Modellobjekte zufällig in Django
Beenden bei Verwendung von Python in Terminal (Mac)
Modelländerungen in Django
Vorsichtsmaßnahmen bei der Verwendung von Chainer
Es war zu einfach, eine vorhandene Datenbank mit Django zu verwenden
So lösen Sie den CSRF-Schutz bei Verwendung von AngularJS mit Django
So generieren Sie eine Abfrage mit dem IN-Operator in Django
Was tun, wenn in Django "Ungültiger HTTP_HOST-Header" angezeigt wird?
Vorsichtsmaßnahmen bei der Verwendung von Python mit AtCoder
Vorsichtsmaßnahmen beim Ändern der Unix-Zeit in Datetime-Typ in Pandas
Dinge, die Sie bei der Verwendung von CGI mit Python beachten sollten.