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?

1 ответ

Решение

Sijan, это правильно, что вы хотите, чтобы ваш 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. Но вы все равно можете использовать просмотр необработанных данных.

Другие вопросы по тегам