Bonjour !
Je m'initie à Django, et je commence déjà à m'arracher les cheveux. En effet, j'ai commencé par créer un modèle simple :
1 2 3 4 5 6 7 8 | from django.db import models from . import settings as stg class Project(models.Model): name = models.CharField( max_length=stg.PROJECT_NAME_MAX_LEN, verbose_name='Nom' ) |
J'ai effectué les migrations :
1 2 3 | $ python manage.py makemigrations $ python manage.py migrate $ python manage.py runserver |
Tout fonctionnait, j'avais mon mondèle dans le panneau d'administration, à partir duquel j'ai créé un projet (une instance de mon modèle).
Puis j'ai mis à jour mon modèle (en plusieurs fois pour être précis) :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | from django.db import models from django.contrib.auth.models import User from django.core.validators import MinValueValidator, MaxValueValidator from django.utils.timezone import now from . import settings as stg class Project(models.Model): correspondent = models.ForeignKey(User, on_delete=models.CASCADE) name = models.CharField( max_length=stg.PROJECT_NAME_MAX_LEN, verbose_name='Nom' ) creation_date = models.DateField(default=now, verbose_name='Date de création') background_image = models.ImageField(verbose_name="Image d'arrière-plan") theoretical_duration = models.DurationField( verbose_name='Durée théorique' ) latitude = models.FloatField( validators=[MinValueValidator(stg.MIN_LAT), MaxValueValidator(stg.MAX_LAT)] ) longitude = models.FloatField( validators=[MinValueValidator(stg.MIN_LNG), MaxValueValidator(stg.MAX_LNG)] ) description = models.TextField(default='') progression = models.PositiveSmallIntegerField( default=0, validators=[MaxValueValidator(100)] ) validated = models.BooleanField(default=False, verbose_name='Validé') archived = models.BooleanField(default=False, verbose_name='Archivé') def __str__(self): return self.name |
Sauf qu'au moment de faire ma migration, il m'insulte :
1 2 3 4 5 6 | $ python manage.py makemigrations You are trying to add a non-nullable field 'correspondent' to project 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) 2) Quit, and let me add a default in models.py Select an option: ^CTraceback (most recent call last): |
Je me suis dit que c'était parce que j'avais des champs vides (de mon objet créé tout à l'heure). J'ai donc nettoyé la base :
1 | python manage.py flush |
Mais rien n'y fait. Auriez-vous une piste ?
Merci.
+0
-0