Je suis nouveau dans django et je suis confronté à un problème.
C'était mon modèle précédent.
You are trying to add a non-nullable field 'age' to blog 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:
J'ai ajouté des données à ce modèle. Après cela, j'ai ajouté un champ supplémentaire. Maintenant, mon modèle ressemble à ceci ..
class Blog(models.Model):
name = models.CharField(max_length=100)
tagline = models.TextField()
age = models.IntegerField()
Quand j'ai exécuté la commande python manage.py makemigrations j'ai eu l'erreur suivante qui est évidente.
class Blog(models.Model):
name = models.CharField(max_length=100)
tagline = models.TextField()
Je ne veux pas ajouter default , j'ai donc supprimé le contenu de la table en accédant à db.sqlite3 p >
Mais encore une fois après avoir exécuté python manage.py makemigrations j'obtiens la même erreur.Pourquoi?
5 Réponses :
Lorsque vous ajoutez un nouveau champ (c'est-à-dire une colonne) à une table de base de données, ce champ s'applique à toutes les lignes de la table ... les existantes et toutes les nouvelles. Si le champ ne peut pas être null , une valeur doit être spécifiée pour toutes les lignes existantes.
Par défaut, IntegerField () n'est pas nullable. Cela explique pourquoi vous recevez l'avertissement. Vous avez quelques options:
blank et null dans votre champ de modèle pour permettre au champ d'accepter des valeurs nulles. Pour la dernière option, procédez comme suit:
models.IntegerField (blank = True, null = True)
Mais ce n'est peut-être pas le meilleur choix selon votre cas d'utilisation. Si les valeurs Nullable n'ont pas de sens pour votre champ, j'éviterais de rendre le champ NULL.
age = models.IntegerField(null=True) Django models fields are null set to true by default.
Même si vous avez supprimé la table, toute modification apportée à votre modèle Django fera toujours référence à la migration précédente de ce modèle, il vous faudra donc toujours définir une valeur par défaut. Si vous êtes encore en développement, vous pouvez supprimer les migrations pour ce modèle, puis recommencer les migrations. Mais, c'est une pratique terrible et vous ne devriez jamais faire cela à moins que vous n'écrasiez consciemment vos modèles, la meilleure façon est de faire ce que Django vous dit et de définir une valeur par défaut. Cela aidera de toute façon à long terme avec la gestion des erreurs.
Les autres réponses expliquent assez bien comment définir les valeurs par défaut.
La façon dont vous pouvez résoudre ce problème:
J'espère que cela résoudra votre problème.
Faites ce que Django vous dit, vous pouvez alors supprimer l'attribut default si vous n'en avez pas besoin. Mais c'est une bonne pratique de le garder quand même
Ce n'est pas une erreur. Vous essayez d'ajouter un champ à la base de données sans autoriser à être nul et sans valeur initiale. Si vous ne vous souciez pas des données actuelles de votre tableau, sélectionnez l'option 1 et entrez
Aucuncomme valeur par défaut à définir pour l'instant. Il devrait migrer sans aucun problème.