Мои действия по списку, извлечению и уничтожению работают, как и ожидалось.
HTTP-ответ = 201 «создан»
"POST /api/atoms/?uid=04d38ad99b2a4353a18438c651eac5ab&created_at=2019-05-12T22:30:04.725089Z&updated_at=2019-05-12T22:30:07.053148Z&charge=1&mass=2 HTTP/1.1" 201 152
Внутри ViewSet
class AtomViewSet(viewsets.ViewSet):
def create(self, request):
serializer = AtomSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
# True
serializer.save()
# self.perform_create(serializer) # doesn't work
# self.node.save() # doesn't work
# headers = self.get_success_headers(serializer.data)
return Response(serializer.data, status=status.HTTP_201_CREATED,) # headers=headers
Вот что я получаю, когда запускаю serializer.save()
<Atom: {'uid': '04d38ad99b2a4353a18438c651eac5qq', 'created_at': datetime.datetime(2019, 5, 12, 22, 30, 4, 725089, tzinfo=<UTC>), 'updated_at': datetime.datetime(2019, 4, 12, 22, 30, 7, 53148, tzinfo=<UTC>), 'charge': 0.0, 'mass': 1.0}>
Несмотря на обнадеживающие результаты сохранения, ресурс, как ни странно, не сохраняется в базе данных.
Я использую ViewSets и настраиваемый сериализатор для немодельной модели.AttributeError: 'AtomViewSet' object has no attribute 'perform_create'
Сериализатор
class AtomSerializer(serializers.Serializer):
uid = serializers.CharField()
created_at = serializers.DateTimeField()
updated_at = serializers.DateTimeField()
charge = serializers.FloatField()
mass = serializers.FloatField()
def create(self, validated_data):
return Atom(**validated_data)
def update(self, instance, validated_data):
for field, value in validated_data.items():
setattr(instance, field, value)
return instance
Я сейчас смотрю на свой сериализатор.Не уверен, что создание и обновление должны содержать
http://www.cdrf.co/3.1/rest_framework.serializers/Serializer.html