2012-11-20 3 views
0

J'ai un api dans le cadre de django-repos qui retourne maintenant ces données JSON:Djangorestframework modelResource ajouter un champ à partir d'un foreignkey

[ 
    { 
     "id": 1, 
     "foreignobject": { 
      "id": 3 
     }, 
     "otherfields": "somevalue" 
    } 
] 

Mais je veux qu'il revienne quelque chose comme ça (aplatir le foreigneky à son ID seulement):

[ 
    { 
     "id": 1, 
     "foreignobject_id":3, 
     "otherfields": "somevalue" 
    } 
] 

Faire cela dans la ressource modèle, maintenant j'ai (simplifié):

class ForeignKeyInDataResource(ModelResource): 
    model = TheOtherModel 
    fields = ('id',) 


class SomeModelResource(ModelResource): 
    model = SomeModel 
    fields = ('id',('foreignobject','ForeignKeyInDataResource'),'otherfields',) 

J'ai essayé déjà quelque chose comme:

class SomeModelResource(ModelResource): 
    model = SomeModel 
    fields = ('id','foreignobject__id','otherfields',) 

mais cela n'a pas

pour l'histoire complète, cette façon dont la vue renvoie les données, la liste est le résultat d'une requête sur la SomeModel:

data = Serializer(depth=2).serialize(list) 
return Response(status.HTTP_200_OK, data) 

Répondre

1

J'ai trouvé une autre option: (en lisant la documentation de ModelResource ...) Dans Modelresource vous pouvez définir une fonction (self, instance), qui peut renvoyer l'identifiant.

dans les champs, vous pouvez ajouter cette fonction!

donc, cela fonctionne:

class SomeModelResource(ModelResource): 
    model = SomeModel 
    fields = ('id','foreignobject_id','otherfields',) 

    def foreignobject_id(self, instance): 
     return instance['foreignobject']['id'] 
1

Je ne suis pas vraiment en mesure de soutenir REST cadre 0.x plus, mais si vous décidez de passer à 2.0 est trivial - déclarer simplement le champ sur la sérialiseur comme ceci: foreignobject = PrimaryKeyRelatedField()

+0

Merci pour cette suggestion, je vais garder cela à l'esprit, la mise à jour n'est pas une option en ce moment. –

+0

Comme vous l'avez vu dans une autre question, vous avez répondu ... en travaillant sur la migration. Très beau travail réalisé sur le chemin de la dernière version du framework de repos! –

Questions connexes