AttributeError: объект 'Post' не имеет атрибута 'post_image'

Я использую DRF и Django(4.0) для создания постов в клоне Instagram. Ниже представлены модели. Я успешно реализовал запрос post, но у меня проблемы с реализацией запроса get.

Я пытался вложить два сериализатора внутрь PostViewSerializer для сериализации данных. Однако при выполнении запроса get я получаю следующую ошибку.

Got AttributeError when attempting to get a value for field 'post_image' on serializer 'PostViewSerializer'.
The serializer field might be named incorrectly and not match any attribute or key on the `Post` instance.
Original exception text was: 'Post' object has no attribute 'post_image'.

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

#models.py
class Post(Authorable, Model):
    created_at = models.DateTimeField(default=timezone.now)
    caption = TextField(max_length=350)

class Images(Model):
    post = models.ForeignKey(Post, on_delete=models.CASCADE)
    images = models.FileField(upload_to="images/")

class Videos(Model):
    post = models.ForeignKey(Post, on_delete=models.CASCADE)
    videos = models.FileField(upload_to="videos/")
#behaviours.py
class Authorable(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)

    class Meta:
        abstract = True
    
    def get_user(self):
        return self.user.id
#serializers.py
class ImageViewSerializer(serializers.ModelSerializer):
    class Meta:
        model = Images
        fields = ['images']

class VideoViewSerializer(serializers.ModelSerializer):
    class Meta:
        model = Videos
        fields = [ 'videos']

class PostViewSerializer(serializers.ModelSerializer):
    post_image = ImageViewSerializer()
    post_video = VideoViewSerializer()
    
    class Meta:
        model = Post
        fields = ['post_image', 'post_video', 'caption','user']

class PostUpload(APIView):
    permission_classes = [IsAuthenticated]
    parser_classes = [MultiPartParser, FormParser]
    serializer_class = PostSerializer
    
    def get(self, request):
        user = request.user
        serializer = PostViewSerializer(Post.objects.filter(user=user), many=True)
        return Response(serializer.data, status=status.HTTP_200_OK)

Не существует ImageField, ForeignKey, ManyToManyField и т.д. с post_image в качестве имени. Вы можете получить доступ к изображениям с помощью .images. Таким образом, это означает, что вы используете это в качестве источника:

class PostViewSerializer(serializers.ModelSerializer):
    #           access ForeignKey in reverse 🖟
    post_image = ImageViewSerializer(source='images', many=True)
    post_video = VideoViewSerializer(source='videos', many=True)
    
    class Meta:
        model = Post
        fields = ['post_image', 'post_video', 'caption','user']
Вернуться на верх