2016-12-21 2 views
0

Je construis un Serverside à l'aide django == == 1.10 et djangorestframework 3.4.6DRF: Récupère l'objet de la demande dans renderer personnalisé

je construire un JSONRenderer:

class CustomJSONRenderer(JSONRenderer): 
    def render(self, data, accepted_media_type=None, renderer_context=None): 
     meta_fields = ["temp_save", "subject", "visit"] 
     a = {"fields": {}} 
     for k in data: 
      try: 
       meta_fields.index(k) # Crashes with ValueError if not found 
       a[k] = data[k] 
      except ValueError: 
       a["fields"][k] = data[k] 
     return super(CustomJSONRenderer, self).render(a, accepted_media_type, renderer_context) 

Question: Est-il possible d'obtenir l'objet request de points de vue? Je veux en particulier pour accéder aux paramètres urls (par exemple request.kwargs['pk']

+0

J'ai mis à jour ma réponse ... @ Vingtoft – Devansh

Répondre

2

Vous pouvez obtenir la demande de renderer_context comme suit

request = renderer_context['request'] 

Votre code:..

class CustomJSONRenderer(JSONRenderer): 
    def render(self, data, accepted_media_type=None, renderer_context=None): 
     request = renderer_context['request'] or None 
     meta_fields = ["temp_save", "subject", "visit"] 
     a = {"fields": {}} 
     for k in data: 
      try: 
       meta_fields.index(k) # Crashes with ValueError if not found 
       a[k] = data[k] 
      except ValueError: 
       a["fields"][k] = data[k] 
     return super(CustomJSONRenderer, self).render(a, accepted_media_type, renderer_context) 

Peut être cela vous aidera à

+0

Je reçois l'erreur suivante: AttributeError: L'objet 'DosageRenderer' n'a pas d'attribut 'renderer_con text ' – Vingtoft

+0

Vous aviez presque raison: j'avais besoin d'utiliser le renderer_context passé en paramètre à la fonction "render". Veuillez mettre à jour votre réponse pour que je puisse l'accepter. – Vingtoft

+0

où vous vouliez accéder à 'request' dans votre code. – Devansh