TypeError: l'argument de type 'PosixPath' n'est pas iterabl

Sep 29 2020

Aidez-moi à obtenir cette erreur de python manage.py makemigrations

Migrations pour 'post': post / migrations / 0022_auto_20200929_1749.py - Supprimer la catégorie de champ de la publication - Supprimer la balise de champ de la publication Traceback (dernier appel en dernier): Fichier "manage.py", ligne 22, dans main () File "manage .py ", ligne 18, dans le fichier principal execute_from_command_line (sys.argv)" /usr/lib/python3.8/site-packages/django/core/management/ init .py ", ligne 381, dans execute_from_command_line utility.execute ( ) Fichier "/usr/lib/python3.8/site-packages/django/core/management/ init.py ", ligne 375, dans exécutez self.fetch_command (sous-commande) .run_from_argv (self.argv) File" /usr/lib/python3.8/site-packages/django/core/management/base.py ", ligne 336 , dans run_from_argv connections.close_all () File "/usr/lib/python3.8/site-packages/django/db/utils.py", ligne 224, dans close_all connection.close () File "/ usr / lib / python3 .8 / site-packages / django / db / backends / sqlite3 / base.py ", ligne 248, dans close sinon self.is_in_memory_db (): File" /usr/lib/python3.8/site-packages/django/ db / backends / sqlite3 / base.py ", ligne 367, dans is_in_memory_db return self.creation.is_in_memory_db (self.settings_dict ['NAME']) Fichier" /usr/lib/python3.8/site-packages/django/db /backends/sqlite3/creation.py ", ligne 12, dans is_in_memory_db return database_name == ': memory:' ou 'mode = memory' dans database_name TypeError: l'argument de type 'PosixPath' n'est pas iterabl

models.py à partir de modèles d'importation django.db

> # Create your models here. from django.db import models from django.utils import timezone
> 
> 
> class Post(models.Model):
>     author = models.ForeignKey('auth.User', on_delete=models.CASCADE ,null=True)
>     title = models.CharField(max_length=200,null=True)
>     description=models.TextField(default='a')
>     text = models.TextField(null=True)
>     Img = models.ImageField(upload_to='images/',null =True)
>     UserImg= models.ImageField(upload_to='images/user/',null =True)
> 
>     created_date = models.DateTimeField(
>             default=timezone.now)
>     published_date = models.DateTimeField(
>             blank=True, null=True)
> 
>     def publish(self):
>         self.published_date = timezone.now()
>         self.save()
> 
>     def __str__(self):
>         return self.title
>     def approved_comments(self):
>      return self.comments.filter(approved_comment=True)
> 
> class Comment(models.Model):
>     post = models.ForeignKey('post.Post', on_delete=models.CASCADE, related_name='comments')
>     name = models.CharField(max_length=200)
>     text = models.TextField()
>     email=models.EmailField(null=True)
>     created_date = models.DateTimeField(default=timezone.now)
>     approved_comment = models.BooleanField(default=False)
> 
>     def approve(self):
>         self.approved_comment = True
>         self.save()
> 
>     def __str__(self):
>         return self.text

Réponses

AzyCrw4282 Sep 30 2020 at 00:17

L'erreur est quelque peu déformée, lui disant de supprimer un fieldqui n'existe pas (ou peut avoir existé auparavant) mais ne devrait pas être la cause de l'erreur lors des migrations.

Migrations pour 'post': post / migrations / 0022_auto_20200929_1749.py - Supprimer la catégorie de champ de l'article - Supprimer la balise de champ de l'article Traceback

Si j'ai raison, vous utilisez peut-être Django 3.1, qui a déplacé le pseudo-paramètre BASE_DIR à utiliser pathlib.Pathplutôt qu'une simple chaîne. Le support pour cela nécessitait l'ajout str()à certains endroits comme le pilote sqlite.

Si vous regardez la définition de BASE_DIR dans votre fichier de paramètres, utilise-t-il un Path ()? Si c'est le cas, vous pouvez utiliser str () autour de son utilisation dans votre paramètre DATABASES, ie str(BASE_DIR / "something.sqlite").

Lisez ici pour en savoir plus - Utilisez Pathlib dans votre fichier de paramètres Django