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