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 depuis ma classe Serializer.
django
django-rest-framework
PythonIsGreat
la source
la source
CurrentUserDefault
est absolument ❤️ django-rest-framework.org/api-guide/validators/…Réponses:
Vous ne pouvez pas accéder
request.user
directement au. Vous devez accéder à l'objet de requête, puis récupérer l'attribut utilisateur.Comme ça:
Ou pour être plus sûr,
Plus d'informations sur le contexte supplémentaire peuvent être lues ici
la source
NameError: name 'self' is not defined
validate()
method, self.context est un dict vide. Pourquoi?En fait, vous n'avez pas à vous soucier du contexte. Il existe une bien meilleure façon de le faire:
la source
Comme Igor l'a mentionné dans une autre réponse, l'utilisation peut utiliser CurrentUserDefault. Si vous ne souhaitez pas remplacer la méthode de sauvegarde uniquement pour cela, utilisez doc :
la source
Vous pouvez passer
request.user
lors d'un appel.save(...)
dans une vue:Voici le modèle:
la source
Vous avez besoin d'une petite modification dans votre sérialiseur:
Voici un exemple, utilisant des ensembles de vues de mélange de modèle. Dans
create
method, vous pouvez trouver la bonne façon d'appeler le sérialiseur. La méthode get_serializer remplit correctement le dictionnaire contextuel. Si vous devez utiliser un sérialiseur différent de celui défini sur l'ensemble de vues, consultez laupdate
méthode sur la façon d'initier le sérialiseur avec un dictionnaire de contexte, qui transmet également l'objet de requête au sérialiseur.la source