1

初めてdrf_mongoengineを使用しており、モデルの設定に問題があります。ドキュメント内のEmbeddedDocumentが初期化されない

{ 
 
    "name" : "new_name", 
 
    "metadata": { 
 
     "total_efficiency": 0.0, 
 
     "eff_vs_layer_thickness":{ 
 
      "x":[], 
 
      "y":[] 
 
      } 
 
     } 
 
}
文書は、「メタデータ」フィールドなしで作成されています。私は、文書は次のように初期化することにしたいです。私は何が欠けていますか?

モデル:

class 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=[])

シリアライザ:

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

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

View: 
 
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

答えて

0

@alvcarmona、DRF-MEへようこそ。あなたは一般的にすべてのことを正しくやっています。

DetectorSerializerの内部に自動的に作成されるMetadataSerializerは必要ありません。

また、(ここのように:https://github.com/umutbozkurt/django-rest-framework-mongoengine/blob/master/rest_framework_mongoengine/generics.py#L16rest_framework_mongoengine.generics.GenericApiViewにそれらを混ぜ、代わりに、完全なビューセット(viewsets.ModelViewSet)にmixins.UpdateModelMixinmixins.DestroyModelMixinを混在させないでください。

それ以外は、あなたはすべてのことを正しくやっていると思います。あなたが私のプロジェクトをギブスで見せることができれば、私はもっと助けることができました。

UPDATE:汎用ビューにミックスインを混合する、as we do hereは例えばそれを行う:

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

おかげ@Boris Burkov、私は私が埋め込まれた文書なしで文書を作成していたが実現しました。ミックスインを汎用APIビューにミックスする方法は分かりません。私のレポはこれです:https://github.com/alvcarmona/efficiencycalculatorweb – alvcarmona

+0

@alvcarmona許可された操作のカスタムサブセットのみを持つViewSetの例については、記事への私の更新を参照してください。 –

関連する問題