Django Rest Framework Mongoengine中不显示MapField

时间:2016-10-04 08:53:16

标签: django mongodb mongoengine restframeworkmongoengine

我有一个具有以下属性的模型。

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

它只是提供以下输出:

enter image description here

但我希望它能用AudioImage类中的所有字段来解决树状结构。 我错过了什么吗?或者MapField有另一种方法吗?

1 个答案:

答案 0 :(得分: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字段的嵌套表单输入。但您仍可以使用原始数据视图。