MapField не отображается в Django Rest Framework Mongoengine

У меня есть модель со следующими атрибутами.

class File(DynamicDocument):
    country = fields.StringField(max_length=100, unique=True)
    languages = fields.MapField(fields.MapField(
        fields.EmbeddedDocumentField(AudioImage)))

Я пытаюсь использовать Django Rest Framework Mongoengine следующим образом:

from rest_framework_mongoengine.serializers import DocumentSerializer

class TestSerializer(DocumentSerializer):
    class Meta:
        model = File

Он просто дает следующий вывод:

введите здесь описание изображения

Но я хотел, чтобы он обращался к древовидной структуре со всеми полями из класса AudioImage. Я что-то пропустил? или есть другой способ для MapField?


person Sijan Bhandari    schedule 04.10.2016    source источник


Ответы (1)


Сиджан, правильно ли вы хотите, чтобы ваши File документы имели следующую структуру:

{
    "country": "UK",
    "languages": {
        "hindi": AudioImageJSON,
        "russian": AudioImageJSON,
        "cockney": AudioImageJSON
    }
}

где структура AudioImageJSON описывается соответствующим EmbeddedDocument?

В этом случае ваш DocumentSerializer правильный, и вы указываете свою модель следующим образом:

class AudioImage(EmbeddedDocument):
    content = fields.FileField()

class File(DynamicDocument):
    country = fields.StringField(max_length=100, unique=True)
    languages = fields.MapField(fields.EmbeddedDocumentField(AudioImage))

Обратите внимание, что Browsable API не сможет отображать входные данные вложенной формы для полей EmbeddedDocument. Но вы по-прежнему можете использовать представление необработанных данных.

person Boris Burkov    schedule 24.11.2016