class M_Post(models.Model):
''''
CODE
''''
class M_File(models.Model):
....
CODE
....
class M_Post_File(models.Model):
post = models.ForeignKey(M_Post,on_delete=models.CASCADE)
file = models.ForeignKey(M_File,on_delete=models.CASCADE,null=True)
erreur:
Django.db.utils.NotSupportedError: renommer la table 'posts_file' lors d'une transaction n'est pas pris en charge sur SQLite car cela romprait l'intégrité référentielle. Essayez d'ajouter atomic = False
à la classe de migration.
comment résoudre cette erreur
accédez au fichier de migration associé (créé automatiquement dans le répertoire de migration après la commande makemigrations) et ajoutez atomic = False
après class Migration(migrations.Migration):
pour pouvoir migrer les modifications.
Si vous avez toujours le problème, voici un exemple:
# Generated by Django 2.1 on 2018-08-16 21:22
from Django.db import migrations
class Migration(migrations.Migration):
atomic = False # <<<< THIS LINE
dependencies = [
('shop', '0004_product_imgfeat'),
]
operations = [
migrations.RenameModel(
old_name='Category',
new_name='CategoryShop',
),
]
Si vous ne voulez rien toucher et que vous venez de commencer votre projet (enfin, pas nécessairement), vous pouvez simplement supprimer les fichiers de migration du répertoire de migration et migrer à nouveau.
Sinon, remplacez la variable atomic
dans le fichier de migration par False
pour pouvoir migrer vos modifications.
J'ai migré plusieurs fois après avoir eu cette erreur.
Ensuite, j'ai fait ce que Selim a dit ci-dessus et j'ai également ajouté atomic = False
après class Migration(migrations.Migration):
dans chaque fichier de migration, ce qui était un peu ridicule, car je ne savais pas quel fichier était LE fichier de migration associé ...
Ensuite, j'ai cherché "atomique = Faux" dans la documentation de Django et j'ai trouvé ceux-ci: 12
Comme l'erreur " Renommer la table 'posts_file' lors d'une transaction n'est pas prise en charge sur SQLite ", nous savons que le changement de nom pendant une transaction n'est pas pris en charge sur SQLite. Il est donc nécessaire d'ajouter atomic=False
. Mais je ne connais pas les transactions DDL, donc c'est trop pour moi ...