Django rest framework возвращает 201 созданный, но в БД ничего не изменилось - PullRequest
0 голосов
/ 26 декабря 2018

Вот и все.В консоли django нет ошибок, сообщается, что объект создан, запрос django rest возвращает json экземпляра MyModel со всеми полями (включая id), установленными в null, хотя некоторые из них я передаю непустыми.И новый элемент не появляется в базе данных.

Код выглядит следующим образом:

class MyModelSerializer(rfs.ModelSerializer):
    class Meta:
        model = MyModel
        fields = ['id', 'foo', 'bar']

    def create(self, validated_data):
        return MyModel(**validated_data)

class MyModelView(mixins.CreateModelMixin,
                  generics.GenericAPIView):
    permission_classes = [permissions.IsAdminUser]
    serializer_class = MyModelSerializer
    queryset = MyModel.objects.all()
    # TBH that seems strange to me, but tutorial suggest showing

    def post(self, request, *args, **kwargs):
        return self.create(request, *args, **kwargs)

url(r'^api/web/my-model/$',
    MyModelView.as_view(),
    name='my-model')

MyModel не прикреплен, но он работает нормально со стандартными редакторами на основе форм django.

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

Проблема в методе create() из MyModelSerializer.Простой вызов MyModel(**validated_data) не поместит данные в базу данных, а только создаст экземпляр MyModel.Для сохранения данных в базу данных вы должны позвонить instance.save() или MyModel.objects.create(**validated_data).Ваш сериализатор должен выглядеть следующим образом:

class MyModelSerializer(rfs.ModelSerializer):

    def create(self, validated_data):
        return MyModel.objects.create(**validated_data)

В вашем случае я не вижу необходимости перезаписывать метод create() для MyModelSerializer (также post() метод для MyModelView).ModelSerializer, CreateModelMixin и GenericAPIView уже делают именно то, что вы делаете, переписывая эти методы

0 голосов
/ 27 декабря 2018

Я ошибочно переопределил некоторые методы в сериализаторе.Удалил эти методы и он начал работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...