Tôi hiện đang làm việc trên Django với Django Rest Framwork.ModelViewSet - Cập nhật trường lồng nhau
Tôi không thể cập nhật đối tượng của mình trong trường đối tượng lồng nhau.
serializer.py
class OwnerSerializer(serializers.ModelSerializer):
class Meta:
model = Owner
fields = ('id', 'name')
class CarSerializer(serializers.ModelSerializer):
owner = ownerSerializer(many=False, read_only=False)
class Meta:
model = Car
fields = ('id', 'name', 'owner')
view.py
class OwnerViewSet(viewsets.ModelViewSet):
queryset = Owner.objects.all()
serializer_class = OwnerSerializer
class CarViewSet(viewsets.ModelViewSet):
serializer_class = CarSerializer
queryset = Car.objects.all()
def create(self, request):
serialized = self.serializer_class(data=request.DATA)
if serialized.is_valid():
serialized.save()
return Response(status=HTTP_202_ACCEPTED)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Khi tôi làm điều này:
Request URL:http://localhost:9000/api/v1/cars/1/?format=json
Request Method:PUT
Request Paylod :
{
"id":1,
"name": "TEST",
"ower": {
"id":1,
"name": "owner_test"
}
}
tôi nhận được phản ứng sau:
The `.update()` method does not support writable nestedfields by default.
Write an explicit `.update()` method for serializer `app.serializers.CarSerializer`,
or set `read_only=True` on nested serializer fields.
Biết:
- Tôi muốn giữ serialization chủ sở hữu trên GET;
- Chúng ta có thể tưởng tượng chiếc xe lồng nhau bởi một đối tượng và vv ...
Làm thế nào tôi có thể làm gì nếu tôi muốn thay đổi chủ sở hữu khi tôi cập nhật các xe.
bản sao có thể có của [django-rest-framework 3.0 tạo hoặc cập nhật trong bộ nối tiếp lồng nhau] (http://stackoverflow.com/questions/27434593/django-rest-framework-3-0-create-or-update -in-lồng nhau-serializer) –
Xe tăng! Tôi lặp lại bản thân mình xin lỗi, nhưng tại sao ghi đè là trong serializer và không phải trong xem, như: [Django-doc] (http://www.django-rest-framework.org/api-guide/viewsets/#marking- thêm hành động-cho-định tuyến), theo cách đó có thể trả về trạng thái ?? –