Как мне сериализовать ImageField в Django? - PullRequest
1 голос
/ 21 сентября 2011

Я пытаюсь сериализовать одну из моих моделей с ImageField. Кажется, встроенный сериализатор не может сериализовать это, и поэтому я подумал о написании собственного сериализатора. Не могли бы вы рассказать мне, как можно сериализовать образ и использовать его с сериализатором JSON по умолчанию в Django?

Спасибо

Ответы [ 3 ]

5 голосов
/ 01 октября 2011

Я написал расширение для кодировщика simplejson. Вместо сериализации изображения в base643, он возвращает путь к изображению. Вот фрагмент кода:

def encode_datetime(obj):
    """
    Extended encoder function that helps to serialize dates and images
    """
    if isinstance(obj, datetime.date):
        try:
            return obj.strftime('%Y-%m-%d')
        except ValueError, e:
            return ''

    if isinstance(obj, ImageFieldFile):
        try:
            return obj.path
        except ValueError, e:
            return ''

    raise TypeError(repr(obj) + " is not JSON serializable")
3 голосов
/ 17 декабря 2014

вы не можете сериализовать объект, потому что это изображение.Вы должны сериализовать строковое представление его пути.

Самый простой способ добиться этого - вызвать его метод str (), когда вам нужно его сериализовать.

json.dumps(unicode(my_imagefield)) # py2
json.dumps(str(my_imagefield)) # py3

должно работать.

2 голосов
/ 21 сентября 2011

Вы можете попробовать кодировку base64 для сериализации изображения, которое будет использоваться внутри JSON

...