DRF сериализатор удалить imagefield абсолютный URL - PullRequest
0 голосов
/ 24 января 2020

В DRF, теперь, если я сохраняю изображение, serializer дает мне изображение с абсолютным путем. Но в моем сценарии я не хочу абсолютного пути. Мне просто нужен путь к изображению, который есть в БД. В моем сценарии я жестко кодирую путь к изображению в json. Поэтому я не могу использовать абсолютный путь. Может кто-нибудь предложить несколько идей для его реализации.

Ответы [ 3 ]

1 голос
/ 24 января 2020

Создание пользовательских FileField решит проблему

<b>class CustomFileField(serializers.FileField):
    def to_representation(self, value):
        if not value:
            return None

        if not getattr(value, 'path', None):
            # If the file has not been saved it may not have a path.
            return None
        return value.path</b>


class MyFooSerializer(serializers.ModelSerializer):
    <b>my_file_field = CustomFileField()</b>
    ...
    # other code
1 голос
/ 24 января 2020

Вы можете использовать SerializerMethodField. Вы можете вернуть значение, хранящееся в базе данных, выполнив следующие действия:

class YourSerializer(serializers.ModelSerializer):
    image = serializers.SerializerMethodField()

    def get_image(self, obj):
        return obj.image.file.name

документы: https://www.django-rest-framework.org/api-guide/fields/#serializermethodfield

0 голосов
/ 04 мая 2020

Приведенные выше ответы работают для метода списка и получения, но мне нужно добавить для публикации и получения вместо того, чтобы запрашивать и сериализовать его снова. Метод ниже будет работать.

Обычно для ImageField и FileField возвращает имя, но в DRF оно было преобразовано в URL для полезности. Так что вам просто нужно изменить это все.

В вашем serailizer просто укажите ниже вот так:

Field_name = serializers.ImageField(use_url=False)

Таким образом, эта строка преобразует абсолютный URL в имя как ответ после Сохраните и Обновите .

Для получения дополнительной информации см. ссылка

...