1

J'utilise drf_mongoengine pour la première fois et j'ai des problèmes pour configurer les modèles. Je veux que les documents à initialisés comme ceci:EmbeddedDocument dans un document ne s'initialise pas

{ 
 
    "name" : "new_name", 
 
    "metadata": { 
 
     "total_efficiency": 0.0, 
 
     "eff_vs_layer_thickness":{ 
 
      "x":[], 
 
      "y":[] 
 
      } 
 
     } 
 
}
Les documents sont créés sans le champ « métadonnées ». Qu'est-ce que je rate?

Modèles:

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

sérialiseur:

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

Répondre

0

@alvcarmona, bienvenue sur DRF-ME. Vous faites généralement tout bien. Juste un couple de choses: vous n'avez pas besoin de MetadataSerializer, car il sera créé automatiquement à DetectorSerializer.

Vous ne devriez pas mélanger dans un viewset complet (viewsets.ModelViewSet) mixins.UpdateModelMixin et mixins.DestroyModelMixin, au contraire, les mélanger dans rest_framework_mongoengine.generics.GenericApiView (comme ici: https://github.com/umutbozkurt/django-rest-framework-mongoengine/blob/master/rest_framework_mongoengine/generics.py#L16).

À part ça, je pense que vous faites tout ce qu'il faut. Si vous pouvez me montrer votre projet sur github, je pourrais aider plus.

MISE À JOUR: mélanger mixins en vue générique, faites-le as we do here .: par exemple

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

Merci @Boris Burkov, je réalise que je créais les documents sans les documents incorporés. Je ne comprends pas comment mélanger les mixins dans une vue api générique. Mon repo est ceci: https: //github.com/alvcarmona/efficiencycalculatorweb – alvcarmona

+0

@alvcarmona Voir ma mise à jour à la poste pour un exemple de ViewSet avec seulement un sous-ensemble personnalisé des opérations autorisées. –