1

我是第一次使用 drf_mongoengine,但在设置模型时遇到了问题。我希望文件像这样初始化:

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

创建的文档没有“元数据”字段。我错过了什么?

模型:类检测器(文档):名称 = fields.StringField(null=True)元数据 = fields.EmbeddedDocumentField(元数据,null=False)

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__'

看法:

class DetectorViewSet(viewsets.ModelViewSet, mixins.UpdateModelMixin, mixins.DestroyModelMixin):
    '''
    Contains information about inputs/outputs of a single program
    that may be used in Universe workflows.
    '''
    lookup_field = 'id'
    serializer_class = DetectorSerializer
4

1 回答 1

0

@alvcarmona,欢迎来到 DRF-ME。你通常做的一切都是正确的。

只是几件事:你不需要MetadataSerializer,因为它会在里面自动创建DetectorSerializer

您也不应该将它们混入一个完整的mixins.UpdateModelMixin视图#L16)。mixins.DestroyModelMixinviewsets.ModelViewSetrest_framework_mongoengine.generics.GenericApiView

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

更新:将 mixins 混合到通用视图中,像我们在这里做的那样做,例如:

class PostPutViewSet(mixins.CreateModelMixin,
               mixins.UpdateModelMixin,
               GenericViewSet):
    """ Adaptation of DRF ModelViewSet """
    pass
于 2017-08-25T17:53:11.183 回答