Document中的EmbeddedDocument没有初始化

时间:2017-08-24 12:04:32

标签: python django django-rest-framework restframeworkmongoengine

我第一次使用drf_mongoengine而且我在设置模型时遇到了问题。我希望文档初始化如下:

if getattr(form, 'admirer_or_model', form) == "model":
    ...

创建的文档没有"元数据"领域。我错过了什么?

型号:     class Detector(文档):         name = fields.StringField(null = True)         metadata = fields.EmbeddedDocumentField(Metadata,null = False)

{
    "name" : "new_name",
    "metadata": {
        "total_efficiency": 0.0,
        "eff_vs_layer_thickness":{
            "x":[],
            "y":[]
        }
    }
}

串行:

class Metadata(EmbeddedDocument):
    eff_vs_layer = fields.EmbeddedDocumentField(Plot)
    total_efficiency = fields.DecimalField(null=True, default=0)

class Plot(EmbeddedDocument):
    x = fields.ListField(fields.FloatField(null=True), default=[])
    y = fields.ListField(fields.FloatField(null=True), default=[])

查看:

class DetectorSerializer(mongoserializers.DocumentSerializer):
     class Meta:
        model = Detector
        fields = '__all__'

 class MetadataSerializer(mongoserializers.EmbeddedDocumentSerializer):
    class Meta:
        model = Metadata
        fields = '__all__'

1 个答案:

答案 0 :(得分:0)

@alvcarmona,欢迎来到DRF-ME。你一般都做对了。

只需要做几件事:您不需要MetadataSerializer,因为它会在DetectorSerializer内自动创建。

您也不应该将mixins.UpdateModelMixinmixins.DestroyModelMixin混合到一个完整的视图集(viewsets.ModelViewSet)中,而是将它们混合到rest_framework_mongoengine.generics.GenericApiView中(如下所示:{{ 3}})。

除此之外,我认为,你做的一切都是正确的。如果你能在github上向我展示你的项目,我可以提供更多帮助。

更新:将mixins混合到通用视图中,执行https://github.com/umutbozkurt/django-rest-framework-mongoengine/blob/master/rest_framework_mongoengine/generics.py#L16例如:

class PostPutViewSet(mixins.CreateModelMixin,
               mixins.UpdateModelMixin,
               GenericViewSet):
    """ Adaptation of DRF ModelViewSet """
    pass