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
Другие вопросы по тегам