[PYTHON] Précautions lors de l'ajout d'éléments à l'aide de DateField à un modèle existant ultérieurement dans Django

introduction

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.

Modèle existant

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.

Ajout d'article

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

Précautions lors de l'ajout d'éléments à l'aide de DateField à un modèle existant ultérieurement dans Django
Créez un modèle de suivi facile à utiliser avec Django en utilisant ManyToManyField via
Précautions lors de l'utilisation de Pit avec Python
[Note] Éléments à vérifier lorsqu'une boucle infinie se produit dans pyenv
Paramètres lors de l'ajout d'un disque dur sous Linux
Précautions lors de l'utilisation de l'instruction for dans les pandas
Soyez prudent lors de l'ajout d'un tableau à un tableau
Si vous souhaitez afficher la valeur à l'aide des choix du modèle dans le modèle Django
Remarques sur l'ajout de setter et deleter dans une classe dérivée à la propriété getter de la classe de base
Comment obtenir plusieurs objets de modèle au hasard dans Django
Comment quitter lors de l'utilisation de Python dans Terminal (Mac)
Modifications du modèle dans Django
Précautions lors de l'utilisation de Chainer
C'était trop facile d'utiliser une base de données existante avec Django
Comment résoudre la protection CSRF lors de l'utilisation d'AngularJS avec Django
Comment générer une requête à l'aide de l'opérateur IN dans Django
Que faire lorsque "En-tête HTTP_HOST non valide" apparaît dans Django
Précautions lors de l'utilisation de Python avec AtCoder
Précautions lors du changement d'heure Unix en type datetime dans les pandas
Choses à garder à l'esprit lors de l'utilisation de cgi avec python.