Разбор obj в DRF при использовании multipart / form-data - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть модель:

class Post(models.Model):
   fonts = JSONField() # Postgres

У меня есть вложенный сериализатор:

PostSerializer(serializer.ModelSerializer):
    fonts = FontsSerializer(many=True, required=False)

FontsSerializer(serializer.Serializer):
    primary = serializers.CharField(required=False, allow_null=True)
    secondary = serializers.CharField(required=False, allow_null=True)

Фронтовые парни использовали multipart / form-data для отправки мне данных: enter image description here

Но это не обновление данных на моей стороне. Я не могу найти, как бороться с этим. Я попытался изменить ключи на key.nested: enter image description here

И его работа. Данные успешно обновлены.

Какой путь правильный? Как настроить DRF для работы с ключевым [вложенным] шаблоном?

PS: Они не могут использовать json, Вопрос о формах-данных и о том, как обращаться с вложенными внутри.

1 Ответ

0 голосов
/ 06 февраля 2020

Я нашел одно возможное решение - создать собственный Parser.

class NestedMultipartParser(parsers.MultiPartParser):
"""
Parser for processing nested field values
"""

def parse(self, stream, media_type=None, parser_context=None):
    result = super().parse(stream=stream, media_type=media_type, parser_context=parser_context)
    data = result.data.copy()
    for key, value in result.data.items():
        if '[' in key and ']' in key:
            del data[key]
            data[key.replace('[', '.').replace(']', '')] = value

    return parsers.DataAndFiles(data, result.files)

А затем нужно добавить в поле зрения:

parser_classes = (NestedMultipartParser,)

Но вопрос все еще открыт.

...