TypeError: đối số kiểu 'PosixPath' không phải là iterabl
vui lòng giúp tôi gặp lỗi này từ python management.py makemigrations
Di chuyển cho 'post': post / migrations / 0022_auto_20200929_1749.py - Xóa danh mục trường khỏi bài đăng - Xóa thẻ trường khỏi bài đăng Traceback (lần gọi gần đây nhất): File "management.py", dòng 22, trong main () File "quản lý .py ", dòng 18, trong tệp execute_from_command_line (sys.argv) chính" /usr/lib/python3.8/site-packages/django/core/management/ init .py ", dòng 381, trong thực thi_from_command_line tiện ích.execute ( ) Tệp "/usr/lib/python3.8/site-packages/django/core/management/ init.py ", dòng 375, trong thực thi self.fetch_command (lệnh con) .run_from_argv (self.argv) Tệp" /usr/lib/python3.8/site-packages/django/core/management/base.py ", dòng 336 , trong tệp run_from_argv links.close_all () "/usr/lib/python3.8/site-packages/django/db/utils.py", dòng 224, trong close_all connect.close () Tệp "/ usr / lib / python3 .8 / site-package / django / db / backends / sqlite3 / base.py ", dòng 248, đóng nếu không phải self.is_in_memory_db (): File" /usr/lib/python3.8/site-packages/django/ db / backends / sqlite3 / base.py ", dòng 367, trong is_in_memory_db trả về self.creation.is_in_memory_db (self.settings_dict ['NAME']) Tệp" /usr/lib/python3.8/site-packages/django/db /backends/sqlite3/creation.py ", dòng 12, trong is_in_memory_db return database_name == ': memory:' hoặc 'mode = memory' trong database_name TypeError: đối số kiểu 'PosixPath' không phải là iterabl
models.py từ django.db nhập mô hình
> # 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
Trả lời
Lỗi này hơi bị mô tả sai, yêu cầu nó xóa một fieldlỗi không tồn tại (hoặc có thể đã tồn tại trước đó) nhưng không phải là nguyên nhân gây ra lỗi khi thực hiện di chuyển.
Di chuyển cho 'bài đăng': post / migrations / 0022_auto_20200929_1749.py - Xóa danh mục trường khỏi bài đăng - Xóa thẻ trường khỏi bài đăng Traceback
Nếu tôi đúng, bạn có thể đang sử dụng Django 3.1, điều này đã chuyển cài đặt giả BASE_DIR sang sử dụng pathlib.Paththay vì một chuỗi thuần túy. Hỗ trợ cho điều này cần thiết thêm str()vào một số nơi như trình điều khiển sqlite.
Nếu bạn xem định nghĩa của BASE_DIR trong tệp cài đặt của mình, nó có đang sử dụng Path () không? Nếu vậy, bạn có thể sử dụng str () xung quanh việc sử dụng nó trong cài đặt DATABASES của bạn, tức là str(BASE_DIR / "something.sqlite").
Đọc ở đây để biết thêm - Sử dụng Pathlib trong Tệp Cài đặt Django của bạn