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.
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.
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.