Comment obtenir Request.User dans le sérialiseur de Django-Rest-Framework?

J’ai essayé quelque chose comme ça, ça ne marche pas.

class PostSerializer(serializers.ModelSerializer): class Meta: model = Post def save(self): user = self.context['request.user'] title = self.validated_data['title'] article = self.validated_data['article'] 

J’ai besoin d’un moyen d’accéder à request.user à partir de ma classe Serializer.

Vous ne pouvez pas accéder directement à request.user . Vous devez accéder à l’object de requête, puis récupérer l’atsortingbut utilisateur.

Comme ça:

 user = self.context['request'].user 

Ou pour être plus en sécurité,

 user = None request = self.context.get("request") if request and hasattr(request, "user"): user = request.user 

Plus sur le contexte supplémentaire peut être lu ici

En fait, vous n’avez pas à vous soucier du contexte. Il y a une bien meilleure façon de le faire:

 from rest_framework.fields import CurrentUserDefault class PostSerializer(serializers.ModelSerializer): class Meta: model = Post def save(self): user = CurrentUserDefault() # <= magic! title = self.validated_data['title'] article = self.validated_data['article'] 

Comme Igor l’a mentionné dans d’autres réponses, l’utilisation peut utiliser CurrentUserDefault. Si vous ne voulez pas remplacer la méthode de sauvegarde uniquement pour cela, utilisez doc :

 from rest_framework import serializers class PostSerializer(serializers.ModelSerializer): user = serializers.PrimaryKeyRelatedField(read_only=True, default=serializers.CurrentUserDefault()) class Meta: model = Post