/ / Django 1.7 vierge convention CharField / TextField - python, django, django-1.7, django-migrations

Convention Django 1.7 vierge CharField / TextField - python, django, django-1.7, django-migrations

Avec le nouveau framework de migration de Django, disons que j’ai le modèle suivant qui existe déjà dans la base de données:

class TestModel(models.Model):
field_1 = models.CharField(max_length=20)

Je veux maintenant ajouter un nouveau TextField au modèle, ainsi il ressemble à ceci:

class TestModel(models.Model):
field_1 = models.CharField(max_length=20)
field_2 = models.TextField(blank=True)

Lorsque j'essaie de migrer ce modèle à l'aide de python manage.py makemigrations, Je reçois cette invite:

You are trying to add a non-nullable field "field_2" to testmodel 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

Je peux facilement résoudre ce problème en ajoutant null=True à field_2, mais la convention de Django est de éviter en utilisant null sur des champs basés sur des chaînes tels que CharField et TextField (de https://docs.djangoproject.com/en/dev/ref/models/fields/). Est-ce un bug ou est-ce que je comprends mal la documentation?

Réponses:

15 pour la réponse № 1

Ce n'est pas un bug, c'est documenté et logique. Vous ajoutez un nouveau champ, qui est (selon les meilleures pratiques, comme vous l'avez remarqué) non NULLdjouable doit donc y mettre quelque chose pour les enregistrements existants - je suppose que vous voulez que ce soit la chaîne vide.

vous pouvez

 1) Provide a one-off default now (will be set on all existing rows)

alors appuyez simplement sur 1 et fournissez "" (la chaîne vide) comme valeur.

ou préciser default="" dans le models.py, comme suggéré:

 2) Quit, and let me add a default in models.py