Создание изображения с внешним ключом к экземпляру модели не возвращает URL изображения в serializer.data

У меня есть две модели, которые связаны через внешний ключ. Статья может иметь 0, 1 или много изображений. И height_field и width_field вычисляются автоматически. is_title_image задается в запросе POST.

class Article(models.Model):
    slug = models.SlugField(null=True, default=None, unique=True, max_length=255)
    heading = models.CharField(max_length=2550)
    summary = models.CharField(max_length=25500)

class Image1(models.Model):
    height_field=models.PositiveIntegerField(default=0)
    width_field=models.PositiveIntegerField(default=0)
    file = models.ImageField(storage=PublicMediaStorage(), height_field='height_field', width_field='width_field')
    is_title_image = models.BooleanField(default=False)
    article = models.ForeignKey(Article, related_name='images', null=True, on_delete=models.DO_NOTHING)

Сначала я создаю статью в DraggableArticleSerializer и использую pk для создания images. Здесь я не уверен, что это оптимальный способ. Я использую ImageSerializer для получения всех полей из экземпляра изображения. Статья и изображение правильно создаются в базе данных. Но я не могу использовать эти данные в views.py, чтобы вернуть их на фронтенд. Свойство images в serializer.data пусто, а serializer.validated_data просто возвращает входные данные InMemoryUploadedFile:

serializer.validated_data['images'][0]['file'] возвращает OrderedDict([('file', <InMemoryUploadedFile: husky4.jpg (image/jpeg)>), ('is_title_image', True)])

Я не знаю, как мое представление должно быть изменено по сравнению с обычным CreateAPIView. Должен ли я предоставить какие-то дополнительные данные в serializer.save() или моя проблема находится где-то еще.

class DraggableArticleSerializer(serializers.ModelSerializer):
     images = ImageSerializer(many=True, required=False)
     class Meta:
         model = Article
         fields = (
            "slug",
            "heading",
            "summary",
         )
    def create(self, validated_data):
        image_data=validated_data.pop("images")
        article = Article.objects.create(**validated_data)
        for image_entry in image_data:
             image_inputs = data={"file": image_entry['file'], "is_title_image":                                        
             image_entry['is_title_image'],  "article": article.pk}
             serializer = ImageSerializer(data=image_inputs, context=self.context)
             if serializer.is_valid():
                  serializer.save()
        return article
class ImageSerializer(serializers.ModelSerializer):
    file = serializers.FileField( max_length=100000,
                                         allow_empty_file=False)
        fields = (
            "pk",
            "file",
            "get_absolute_url",
            "url",
            "height_field",
            "width_field",
            "is_title_image",
        )
Вернуться на верх