Saya ingin setiap pengguna dapat membuat produk mereka sendiri dengan RESTful API saya. Untuk tujuan ini, saya membuat tampilan yang mewarisi ListCreateAPIView. Masalahnya adalah pengguna hanya boleh membuat produk miliknya sendiri, jadi ketika instance model Produk dibuat, saya ingin bidang Pemilik sesuai dengan pengguna yang diautentikasi.
Inilah model Produk saya
class Product(models.Model):
owner = models.ForeignKey(User)
name = models.CharField(max_length=30)
Jelas serializer saya adalah:
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = models.Product
dan pandangan saya:
class ProductView(generics.ListCreateAPIView):
queryset = models.Product.objects.all()
serializer_class = serializers.ProductSerializer
permission_classes = (IsAuthenticatedOrReadOnly,)
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
#serializer.initial_data['owners'] = models.Person.objects.get(user__email=request.user).user_id
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
Seperti yang Anda lihat, saya mencoba memodifikasi "data_awal", tetapi ini adalah QueryDict, yang tidak dapat diubah. Pilihan lain adalah mengubahnya menjadi dict Python dan kemudian menambahkan nilai "pemilik", tetapi dengan melakukan itu saya mendapatkan setiap nilai sebagai daftar (yaitu {'name': ['MyName']}), jadi itu akan menjadi sangat cara yang buruk untuk menyelesaikan masalah, menurut saya ini harus menjadi solusi yang lebih mudah.