TypeError: argument typu „PosixPath” nie jest iterabl

Sep 29 2020

proszę o pomoc w uzyskaniu tego błędu z makemigrations python manage.py

Migracje dla 'post': post / migrations / 0022_auto_20200929_1749.py - Usuń kategorię pola z posta - Usuń tag pola z posta Traceback (ostatnie połączenie): Plik "manage.py", wiersz 22, w main () Plik "zarządzaj .py ", wiersz 18, w głównym pliku execute_from_command_line (sys.argv)" /usr/lib/python3.8/site-packages/django/core/management/ init .py ", wiersz 381, w execute_from_command_line utility.execute ( ) Plik „/usr/lib/python3.8/site-packages/django/core/management/ init.py ", wiersz 375, w wykonaniu self.fetch_command (podkomenda) .run_from_argv (self.argv) Plik" /usr/lib/python3.8/site-packages/django/core/management/base.py ", wiersz 336 , w run_from_argv connections.close_all () File "/usr/lib/python3.8/site-packages/django/db/utils.py", wiersz 224, w close_all connection.close () Plik "/ usr / lib / python3 .8 / site-packages / django / db / backends / sqlite3 / base.py ", wiersz 248, in close if not self.is_in_memory_db (): File" /usr/lib/python3.8/site-packages/django/ db / backends / sqlite3 / base.py ", wiersz 367, w is_in_memory_db return self.creation.is_in_memory_db (self.settings_dict ['NAZWA']) Plik" /usr/lib/python3.8/site-packages/django/db /backends/sqlite3/creation.py ", wiersz 12, w is_in_memory_db return database_name == ': memory:' lub 'mode = memory' w database_name TypeError: argument typu 'PosixPath' nie jest iterabl

models.py z django.db importu modeli

> # 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

Odpowiedzi

AzyCrw4282 Sep 30 2020 at 00:17

Błąd jest nieco zniekształcony, nakazując usunięcie elementu field, który nie istnieje (lub mógł istnieć wcześniej), ale nie powinien być przyczyną błędu podczas wykonywania migracji.

Migracje dla „post”: post / migrations / 0022_auto_20200929_1749.py - Usuń kategorię pola z posta - Usuń tag pola z posta Traceback

Jeśli mam rację, być może używasz Django 3.1, który przeniósł pseudo-ustawienie BASE_DIR do użycia pathlib.Pathzamiast zwykłego ciągu. Obsługa tego wymagała dodania str()w niektórych miejscach, takich jak sterownik sqlite.

Jeśli spojrzysz na definicję BASE_DIR w pliku ustawień, czy używa ona Path ()? Jeśli tak, możesz użyć str () dookoła jego użycia w ustawieniach DATABASES, tj str(BASE_DIR / "something.sqlite").

Przeczytaj tutaj, aby dowiedzieć się więcej - użyj Pathlib w pliku ustawień Django