Passer contexte de demande de sérialiseur de Viewset dans Django Repos Cadre

J'ai un cas où les valeurs d'un sérialiseur de champ dépend de l'identité de l'utilisateur actuellement connecté. J'ai vu comment faire pour ajouter l'utilisateur au contexte lors de l'initialisation d'un sérialiseur, mais je ne suis pas sûr de la façon de le faire lors de l'utilisation d'un ViewSet, comme vous ne l'approvisionnement de la sérialiseur de classe et non pas le sérialiseur instance.

Fondamentalement, je voudrais savoir comment passer d':

class myModelViewSet(ModelViewSet):
   queryset = myModel.objects.all()
   permission_classes = [DjangoModelPermissions]
   serializer_class = myModelSerializer

à:

class myModelSerializer(serializers.ModelSerializer):
    uploaded_by = serializers.SerializerMethodField()
    special_field = serializers.SerializerMethodField()

    class Meta:
        model = myModel

    def get_special_field(self, obj):
        if self.context['request'].user.has_perm('something.add_something'):
           return something

Désolé si c'était pas clair, à partir de la documentation:
Ajouter Du Contexte
Qui a dit de le faire

serializer = AccountSerializer(account, context={'request': request})
serializer.data

Mais je ne suis pas sûr de savoir comment le faire automatiquement à partir de la viewset, que je ne peux changer le sérialiseur de classe, et non pas le processus de l'instance elle-même.

  • Avez-vous essayé self.context.get('request').user.has_perm("some.permission") ?
  • Voulez-vous something être retourné avec d'autres domaines de processus de la production?
  • Désolé si c'était pas clair, le problème est que l'auto.le contexte est vide dans le sérialiseur.
  • AccountSerializer(account, context={'request': request}) était tout ce dont j'avais besoin pour mon but
InformationsquelleAutor oowowaee | 2015-06-24