文档中的 EmbeddedDocument 未初始化
EmbeddedDocument in a Document doesn't initialize
我是第一次使用 drf_mongoengine,我在设置模型时遇到了问题。我希望文档像这样初始化:
{
"name" : "new_name",
"metadata": {
"total_efficiency": 0.0,
"eff_vs_layer_thickness":{
"x":[],
"y":[]
}
}
}
创建的文档没有 "metadata" 字段。我错过了什么?
型号:
class 探测器(文档):
名称 = 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
@alvcarmona,欢迎来到 DRF-ME。您一般都做对了。
只有几件事:您不需要 MetadataSerializer
,因为它会在 DetectorSerializer
中自动创建。
您也不应该将 mixins.UpdateModelMixin
和 mixins.DestroyModelMixin
混合到一个完整的视图集 (viewsets.ModelViewSet
) 中,而是将它们混合到 rest_framework_mongoengine.generics.GenericApiView
中(就像这里:https://github.com/umutbozkurt/django-rest-framework-mongoengine/blob/master/rest_framework_mongoengine/generics.py#L16).
除此之外,我认为,您所做的一切都是正确的。如果您可以在 github 上向我展示您的项目,我可以提供更多帮助。
更新:要将 mixins 混合到通用视图中,请这样做 as we do here 例如:
class PostPutViewSet(mixins.CreateModelMixin,
mixins.UpdateModelMixin,
GenericViewSet):
""" Adaptation of DRF ModelViewSet """
pass
我是第一次使用 drf_mongoengine,我在设置模型时遇到了问题。我希望文档像这样初始化:
{
"name" : "new_name",
"metadata": {
"total_efficiency": 0.0,
"eff_vs_layer_thickness":{
"x":[],
"y":[]
}
}
}
创建的文档没有 "metadata" 字段。我错过了什么?
型号: class 探测器(文档): 名称 = 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
@alvcarmona,欢迎来到 DRF-ME。您一般都做对了。
只有几件事:您不需要 MetadataSerializer
,因为它会在 DetectorSerializer
中自动创建。
您也不应该将 mixins.UpdateModelMixin
和 mixins.DestroyModelMixin
混合到一个完整的视图集 (viewsets.ModelViewSet
) 中,而是将它们混合到 rest_framework_mongoengine.generics.GenericApiView
中(就像这里:https://github.com/umutbozkurt/django-rest-framework-mongoengine/blob/master/rest_framework_mongoengine/generics.py#L16).
除此之外,我认为,您所做的一切都是正确的。如果您可以在 github 上向我展示您的项目,我可以提供更多帮助。
更新:要将 mixins 混合到通用视图中,请这样做 as we do here 例如:
class PostPutViewSet(mixins.CreateModelMixin,
mixins.UpdateModelMixin,
GenericViewSet):
""" Adaptation of DRF ModelViewSet """
pass