Saya sudah mencoba sesuatu seperti ini, tidak berhasil.
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']
Saya membutuhkan cara untuk dapat mengakses request.user dari kelas Serializer saya.
django
django-rest-framework
PythonIsGreat
sumber
sumber
CurrentUserDefault
benar-benar ❤️ django-rest-framework.org/api-guide/validators/…Jawaban:
Anda tidak dapat mengakses
request.user
secara langsung. Anda perlu mengakses objek permintaan, lalu mengambil atribut pengguna.Seperti ini:
Atau agar lebih aman,
Lebih lanjut tentang konteks tambahan dapat dibaca di sini
sumber
NameError: name 'self' is not defined
validate()
metode, self.context adalah dikt kosong. Mengapa?Sebenarnya, Anda tidak perlu repot dengan konteks. Ada cara yang jauh lebih baik untuk melakukannya:
sumber
Seperti yang disebutkan Igor di jawaban lain, gunakan dapat menggunakan CurrentUserDefault. Jika Anda tidak ingin mengganti metode penyimpanan hanya untuk ini, gunakan doc :
sumber
Anda bisa lewat
request.user
saat memanggil ke.save(...)
dalam tampilan:Inilah modelnya:
sumber
Anda perlu sedikit pengeditan di serializer Anda:
Berikut adalah contoh, menggunakan Model mixing viewsets. Dalam
create
metode, Anda dapat menemukan cara yang tepat untuk memanggil serializer tersebut. Metode get_serializer mengisi kamus konteks dengan benar. Jika Anda perlu menggunakan serializer yang berbeda kemudian ditentukan di viewset, lihatupdate
metode tentang cara memulai serializer dengan kamus konteks, yang juga meneruskan objek permintaan ke serializer.sumber