EmbeddedDocument в документе не инициализируется
Я впервые использую drf_mongoengine и у меня проблемы с настройкой моделей. Я хочу, чтобы документы были инициализированы следующим образом:
{
"name" : "new_name",
"metadata": {
"total_efficiency": 0.0,
"eff_vs_layer_thickness":{
"x":[],
"y":[]
}
}
}
Документы создаются без поля "метаданные". Чего мне не хватает?
Модели: класс Detector (Document): name = fields.StringField (null = True) metadata = fields.EmbeddedDocumentField (Metadata, 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=[])
Serializer:
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
1 ответ
@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).
Кроме этого, я думаю, вы все делаете правильно. Если вы можете показать мне свой проект на GitHub, я мог бы помочь больше.
ОБНОВЛЕНИЕ: чтобы смешать миксины в общий вид, сделайте это, как мы делаем, например:
class PostPutViewSet(mixins.CreateModelMixin,
mixins.UpdateModelMixin,
GenericViewSet):
""" Adaptation of DRF ModelViewSet """
pass