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