0

J'ai des relations parent-enfant dans le modèle DataStore: Building entité avec l'entité de référence à Office. J'effectue une requête sur le modèle Building et je voudrais limiter les champs de l'entité Office dans la réponse JSON. Voici mon code:GAE NDB avec Endpoints Proto Datastore: Comment formater les champs de réponse de la propriété de référence?

@Building.query_method(collection_fields=('id', 'name', 'office'), path='buildings', name='list') 
def List(self, query): 
    return query 

collection_fields attribut fonctionne uniquement pour définir de grands champs de l'entité mère (bâtiment), mais comment limiter les champs d'entité enfant?

Voici mon message de réponse JSON:

{ id : 5 
    name : 'building name' 
    office: { 
     name: 'office name', 
     field1 : 'test', 
     field1 : 'test', 
     field1 : 'test' 
    } 
} 

Je voudrais supprimer certains champs de Office objet (i.e. champ1, champ2, etc.) afin de réduire la taille de la réponse JSON. Définir limité _message_fields_schema de Office objet n'est pas une bonne solution, car il fonctionne globalement. Je voudrais formater uniquement cette requête unique.

Répondre

1

Vous pouvez créer EndpointsAliasProperty dans le modèle Building, où vous pouvez transformer self.office et utiliser cette valeur dans collection_fields:

@EndpointsAliasProperty 
def office_ltd(self): 
    limited = doSomethingWith(self.office) 
    return limited 

@Building.query_method(collection_fields=('id', 'name', 'office_ltd'), 
         path='buildings', name='list') 
def List(self, query): 
    return query