Ich habe so etwas versucht, es funktioniert nicht.
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']
Ich benötige eine Möglichkeit, über meine Serializer-Klasse auf request.user zugreifen zu können.
django
django-rest-framework
PythonIsGreat
quelle
quelle
CurrentUserDefault
ist absolut j django-rest-framework.org/api-guide/validators/…Antworten:
Sie können nicht
request.user
direkt auf die zugreifen . Sie müssen auf das Anforderungsobjekt zugreifen und dann das Benutzerattribut abrufen.So was:
Oder um sicherer zu sein,
Weitere Informationen zum zusätzlichen Kontext finden Sie hier
quelle
NameError: name 'self' is not defined
validate()
Methode self.context ein leeres Diktat. Warum?Eigentlich muss man sich nicht mit dem Kontext beschäftigen. Es gibt einen viel besseren Weg, dies zu tun:
quelle
Wie Igor in einer anderen Antwort erwähnt hat, kann use CurrentUserDefault verwenden. Wenn Sie die Speichermethode nicht nur dafür überschreiben möchten, verwenden Sie doc :
quelle
Sie können übergeben,
request.user
wenn Sie in.save(...)
einer Ansicht aufrufen :Dies ist das Modell:
quelle
Sie benötigen eine kleine Bearbeitung in Ihrem Serializer:
Hier ist ein Beispiel für die Verwendung von Modell-Mischansichten. In der
create
Methode finden Sie die richtige Methode zum Aufrufen des Serializers. Die Methode get_serializer füllt das Kontextwörterbuch ordnungsgemäß aus. Wenn Sie einen anderen Serializer als den im Viewset definierten verwenden müssen, lesen Sie dieupdate
Methode zum Initiieren des Serializers mit dem Kontextwörterbuch, das auch das Anforderungsobjekt an den Serializer übergibt.quelle