Obecnie pracuję nad Django z Django Rest Framwork.ModelViewSet - aktualizacja zagnieżdżonego pola
Nie mogę zaktualizować obiektu w obrębie obiektu zagnieżdżonego.
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)
Kiedy to zrobić:
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"
}
}
uzyskać następujące odpowiedzi:
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.
wiedzieć:
- chcę zachować szeregowanie właściciela na get;
- Możemy sobie wyobrazić samochód zagnieżdżony przez inny obiekt i ect ...
Jak mogę zrobić, jeśli chcę zmienić właściciela kiedy zaktualizować samochód.
możliwy duplikat [django-rest-framework-framework 3.0 tworzenia lub aktualizacji w zagnieżdżonym serializatorze] (http://stackoverflow.com/questions/27434593/django-rest-framework-3-0-create-or-update -in-nested-serializer) –
Czołgi! Powtarzam, przepraszam, ale dlaczego zastąpienie jest w serializatorze, a nie w widoku, jak: [Django-doc] (http://www.django-rest-framework.org/api-guide/viewsets/#marking- dodatkowe akcje routingu), w ten sposób można zwrócić status? –