Au cours du développement, j'ai appris qu'une petite opération est nécessaire lors de l'ajout d'éléments à un modèle existant par la suite, j'ai donc résumé ces connaissances.
Tout d'abord, pour simplifier, supposons que vous ayez un modèle simple comme celui-ci:
class NameModel(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
Pensez à ajouter un élément en utilisant DateField ()
ici.
Ajoutez des éléments comme indiqué ci-dessous.
class NameModel(models.Model):
name = models.CharField(max_length=50)
date = models.DateField() #ajouter à
def __str__(self):
return self.name
J'ai changé le modèle, donc je vais le migrer.
$ python manage.py makemigrations
À ce stade, vous verrez un message similaire au suivant.
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:
Ce message signifie que vous essayez d'ajouter une date
nulle, mais vous ne pouvez pas, et vous pouvez choisir entre deux options pour le résoudre.
Cela est dû au fait que l'élément "date" n'existe pas pour entrer les données d'origine, de sorte que le contenu est devenu nul.
Puisque 2) est une option pour recréer le modèle, nous sélectionnerons 1) ici.
Puis
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
>>>
Il sera affiché. Qu'est-ce que cela met à jour? Nous ajoutons donc ici timezone.now selon les instructions.
c'est tout.
Cela peut également être évité en définissant null = True
dans l'argument de DateField
.
Si vous rencontrez des problèmes, veuillez nous en informer.
Recommended Posts