Попытка сохранить несколько файлов в модели, ссылающейся на другую модель

Я пытаюсь загрузить несколько изображений в модель PostImage, которая ссылается на модель Post через foreignkey, чтобы пост мог содержать несколько изображений.

Вот модель поста:

class Post(models.Model):

    slug = AutoSlugField(populate_from=["category", "created_at", "user"])
    body = models.TextField("content", blank=True, null=True, max_length=5000)
    video = models.FileField(
        upload_to=user_directory_path, null=True, blank=True 
    )
    user = models.ForeignKey(
        User, on_delete=models.CASCADE, verbose_name="author", related_name="posts"
    )
    published = models.BooleanField(default=True)
    pinned = models.BooleanField(default=False)

    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        verbose_name = "post"
        verbose_name_plural = "posts"
        db_table = "posts"
        ordering = ["created_at"]

    def __str__(self):
        return self.body[0:30]

    def get_absolute_url(self):
        return self.slug

Вот модель PostImage

class PostImage(models.Model):
    image = models.ImageField(upload_to="posts/images", default='posts/default.png')
    post = models.ForeignKey(Post, on_delete=models.DO_NOTHING)

    class Meta:
        db_table = "post_images"
        ordering = ["post"]

Вот PostImageSerializer:

class PostImageSerializer(serializers.ModelSerializer):
    class Meta:
        model = PostImage
        fields = ['id', 'image', 'post']
        extra_kwargs = {
           'post' : {'required', False}
        }

и вот PostSerializer:

class PostSerializer(serializers.ModelSerializer):
    images = PostImageSerializer(many=True, required=False)

    class Meta:
        model = Post
        fields = [
            "body",
            "images",
            "video",        
            "user",
            "published",
            "pinned",
            "created_at",
            "updated_at",
        ]
        read_only_fields = ['slug']
    
    def create(self, validated_data):
        post = Post.objects.create(**validated_data)
        try:
            images_data = dict((self.context['request'].FILES).lists()).get('images', None)
            for image in images_data:
                PostImage.objects.create(image=image, post=post)
        except:
            PostImage.objects.create(post=post)
        return Post

Вот набор представлений:

class PostViewSet(viewsets.ModelViewSet):
    queryset = Post.objects.all()
    permission_classes = [permissions.IsAuthenticated]
    serializer_class = PostSerializer
    parser_classes = [MultiPartParser, FormParser]
    #lookup_field = 'slug'

Когда я пытаюсь сохранить сообщение из фронт-энда (Vue 3), я получаю ошибку, о которой не могу найти упоминания в Интернете.

Ошибка:

value = attribute_instance.serializable_value(self.source_attrs[-1])
TypeError: serializable_value() missing 1 required positional argument: 'field_name'

Вот трассировка:

Internal Server Error: /api/v1/posts/create/
Traceback (most recent call last):
  File "/home/calvin/.local/share/virtualenvs/website-OCaWupbT/lib/python3.8/site-packages/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
  File "/home/calvin/.local/share/virtualenvs/website-OCaWupbT/lib/python3.8/site-packages/django/core/handlers/base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/calvin/.local/share/virtualenvs/website-OCaWupbT/lib/python3.8/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "/home/calvin/.local/share/virtualenvs/website-OCaWupbT/lib/python3.8/site-packages/rest_framework/viewsets.py", line 125, in view
    return self.dispatch(request, *args, **kwargs)
  File "/home/calvin/.local/share/virtualenvs/website-OCaWupbT/lib/python3.8/site-packages/rest_framework/views.py", line 509, in dispatch
    response = self.handle_exception(exc)
  File "/home/calvin/.local/share/virtualenvs/website-OCaWupbT/lib/python3.8/site-packages/rest_framework/views.py", line 469, in handle_exception
    self.raise_uncaught_exception(exc)
  File "/home/calvin/.local/share/virtualenvs/website-OCaWupbT/lib/python3.8/site-packages/rest_framework/views.py", line 480, in raise_uncaught_exception
    raise exc
  File "/home/calvin/.local/share/virtualenvs/website-OCaWupbT/lib/python3.8/site-packages/rest_framework/views.py", line 506, in dispatch
    response = handler(request, *args, **kwargs)
  File "/home/calvin/.local/share/virtualenvs/website-OCaWupbT/lib/python3.8/site-packages/rest_framework/mixins.py", line 20, in create
    headers = self.get_success_headers(serializer.data)
  File "/home/calvin/.local/share/virtualenvs/website-OCaWupbT/lib/python3.8/site-packages/rest_framework/serializers.py", line 555, in data
    ret = super().data
  File "/home/calvin/.local/share/virtualenvs/website-OCaWupbT/lib/python3.8/site-packages/rest_framework/serializers.py", line 253, in data
    self._data = self.to_representation(self.instance)
  File "/home/calvin/.local/share/virtualenvs/website-OCaWupbT/lib/python3.8/site-packages/rest_framework/serializers.py", line 509, in to_representation
    attribute = field.get_attribute(instance)
  File "/home/calvin/.local/share/virtualenvs/website-OCaWupbT/lib/python3.8/site-packages/rest_framework/relations.py", line 175, in get_attribute
    value = attribute_instance.serializable_value(self.source_attrs[-1])
TypeError: serializable_value() missing 1 required positional argument: 'field_name'

Я не могу найти другую страницу в Интернете, которая ссылается на точно такую же ошибку, поэтому немного потерялся.

Вернуться на верх