web-dev-qa-db-fra.com

django.db.utils.IntegrityError: Échec de la contrainte NOT NULL: products_product.image ERREUR AVEC LE CHAMP D'IMAGE

Je veux ajouter un champ d'image à mon models.py et télécharger dans mon répertoire media_cdn mais quand je migre pour baser mon model.py il donne cette erreur

Django.db.utils.IntegrityError: NOT NULL constraint failed: products_product.image ERROR WITH IMAGE FIELD

Sortie de cmd

operation.database_forwards(self.app_label, schema_editor, old_state, project_state)

Fichier "C:\Users\PANDEMIC\Desktop\td10\lib\site-packages\Django\db\migrations\operations\fields.py", ligne 84, dans le champ database_forwards, Fichier "C:\Users\PANDEMIC\Desktop\td10\lib\site-packages\Django\db\backends\sqlite3\schema.py ", ligne 231, dans add_field self._remake_table (model, create_fields = [field]) Fichier" C:\Users\PANDEMIC\Desktop\td10\lib\site-packages\Django\db\backends\sqlite3\schema.py ", ligne 199, dans _remake_table self.quote_name (model._meta.db_table), fichier" C:\Users\PANDEMIC\Desktop\td10\lib\site-packages\Django\db\backends\base\schema.py ", ligne 112, dans execute cursor.execute (sql, params) Fichier" C:\Users\PANDEMIC\Desktop\td10\lib\site-packages\Django\db\backends\utils.py ", ligne 79, dans execute return super (CursorDebugWrapper, self) .execute (sql, params) Fichier" C:\Users\PANDEMIC\Desktop\td10\lib\site-packages\Django\db\backends\utils.py ", ligne 64, dans return return self.cursor.execute (sql, params) Fichier" C:\Users\PANDEMIC\Desktop\td10\lib\site-packages\Django\db\utils .py ", ligne 94, dans exit six.reraise (dj_exc_type, dj_exc_value, traceback) Fichier "C:\Users\PANDEMIC\Desktop\td10\lib\site-packages\Django\utils\six.py", ligne 685, dans relancez augmenter la valeur. avec_traceback (tb) Fichier "C:\Users\PANDEMIC\Desktop\td10\lib\site-packages\Django\db\backends\utils.py", ligne 64, dans exécuter return self.cursor.execute ( sql, params) Fichier "C:\Users\PANDEMIC\Desktop\td10\lib\site-packages\Django\db\backends\sqlite3\base.py", ligne 337, en exécutant return Database.Cursor.execute (self, requête, paramètres) Django.db.utils.IntegrityError: Échec de la contrainte NOT NULL: products_product.image

from Django.db import models

# Create your models here.

class Product(models.Model):
    name = models.CharField(max_length=40)
    description = models.TextField(max_length=220, blank=True, default=None)
    image = models.ImageField(upload_to="/products_images/", null=True, blank=True, width_field="width_field", height_field="height_field")
    width_field = models.IntegerField(default=0)
    height_field = models.IntegerField(default=0)
    is_active = models.BooleanField(default=True)
    publish = models.DateField(auto_now=False, auto_now_add=True)
    timestamp = models.DateTimeField(auto_now=False, auto_now_add=True)

    def __str__(self):
        return "%s" % self.id

    class Meta:
        ordering = ["-timestamp"]
        verbose_name = 'Product'
        verbose_name_plural = 'Products'
8
Kronvid Vladimir

il suffit de supprimer votre base et de faire des migrations votre application

0
Kronvid Vladimir

Avez-vous déjà exécuté makemigrations appname ?

Échec de la contrainte NOT NULL

Cette erreur signifie généralement qu'un champ requis n'a pas été fourni, mais je peux voir que vous avez défini les attributs blank = True et null = True dans votre champ d'image.

2
Gerry Hernandez

Des problèmes similaires auxquels nous sommes également confrontés, j'ai vérifié localement en supprimant vide = vrai, nul = vrai fonctionne, mais dans le serveur de production, cela ne fonctionnait pas bien.

Que les fichiers à l'intérieur de l'application où le problème se pose, leur dossier de migration, j'avais supprimé tous les fichiers, puis

python manage.py makemigrations

et

python manage.py migration

Les deux fonctionnaient et runserver fonctionnait bien aussi.

1
Tejas Tank

Accédez au dossier des migrations et supprimez manuellement les fichiers portant le nom 000 * _lastAction_blah-blah, vous pouvez supprimer, probablement tous, mais le fichier 0001_initial.py. Après cette exécution ./manage.py faire des migrations app_you_are_updateing, il devrait mettre à jour votre base de données.

1
Nomad Owl

Si vous avez ajouté un champ à un modèle (ou avez modifié un champ), lorsque vous migrez, Django recherchera les enregistrements précédents et vérifiera s'ils répondent aux contraintes données pour le champ.

Dans votre cas, même si vous avez autorisé null = True pour ImageField, lorsque Django essaie d'ajouter cette colonne à la base de données, il constate que la valeur de ce champ n'a pas été définie pour les enregistrements précédents.

Solution: vous devez ajouter default = None dans ImageField, qui fera les valeurs des enregistrements précédents NULL.

De plus, lorsque Django exécute les migrations, même si vous spécifiez le numéro de migration (par exemple, python manage.py migrate your_app_name 00xx), il vérifie les dépendances dans les migrations précédentes. Maintenant, comme la migration que vous avez effectuée ici a provoqué une erreur, même si vous la corrigez (comme indiqué) et essayez de migrer, elle provoquera toujours la même erreur.

Par conséquent, vous devez supprimer toutes les migrations précédentes jusqu'à celle qui a provoqué l'erreur en premier et réexécuter makemigrations. Ensuite, vous pouvez exécuter migrate sans problème.

0
dee