web-dev-qa-db-fra.com

Erreur: "Vous essayez d'ajouter un champ non nullable"

J'ai défini ci-dessous le modèle et obtenir

erreur: You are trying to add a non-nullable field 'user' to videodata without a default; we can't do that

models.py

class User(Model):
    userID = models.IntegerField()
    userName = models.CharField(max_length=40)
    email = models.EmailField()
    class Meta:
        ordering = ['userName']
        verbose_name = 'User MetaData'
        verbose_name_plural = 'Users MetaData'
    def __unicode__(self):
        return str(self.userName)

class VideoData(Model):
    video = models.CharField(max_length=40)
    time  = models.IntegerField()
    user = models.ForeignKey(User, related_name='User')
    class Meta:
        verbose_name = 'User_Video MetaData'

Où je me trompe ????

14
Naresh

Comme le dit l'erreur, votre champ utilisateur sur VideoData n'autorise pas les valeurs NULL. Vous devez donc lui attribuer un utilisateur par défaut ou autoriser les valeurs NULL. Le moyen le plus simple consiste à autoriser les valeurs NULL. 

user = models.ForeignKey(User, related_name='User', null=True)

ou avoir un utilisateur par défaut

user = models.ForeignKey(User, related_name='User', default=<have your default user id here>)
19
wobbily_col

J'ai rencontré le même problème avec mon OneToOneField. Et ce que j'ai fait est de supprimer tous les fichiers de migration (qui se trouvent dans le répertoire migrations de votre application) et

python manage.py makemigrations

et

python manage.py migrate

Je ne sais pas pourquoi, mais cela a fonctionné dans mon cas. Cela ne vous fera pas mal d'essayer ce que j'ai écrit ci-dessus.

Bonne chance!

11
btaek

La plupart de ces types de situtions ne posent pas de problème pour ne pas ajouter de fichiers au modèle (avec makemigrations et migrate)

Mais en raison d'erreurs incorrectes dans les types de modèles et de formulaires Fields (ICI, cela était dû à une erreur de syntaxe incorrecte de la clé étrangère)

Donc, tout d’abord, reportez-vous à: https://www.djangoproject.com/

Il peut y avoir d'autres raisons aussi:

Parfois, la base de données est remplie et n'accepte que la valeur non Nullable .__ (Cette erreur est assez fréquente dans les nouvelles versions de Django

SO a également défini la condition (null == True) dans votre modèle

1
Kurian Benoy

Voici ce que j'ai fait pour résoudre le même problème

  1. Commentez la référence de clé étrangère dansvideodataet lancez makemigrations et migrez
  2. Ajouter le modèle dans admins.py et créer une nouvelle entrée dans la table 
  3. Maintenant décommentez la référence de clé étrangère et fournissez un default = 1 .Run make migrations and migrate
  4. Supprimez le champ default = 1 dans la clé étrangère.

J'espère que cela vous aidera .. Cette solution fonctionnera chaque fois que vous rencontrerez ce type d'erreur.

1
allsyed