DRF serializer.save () не сохраняется в базе данных - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть API, который будет делать патч для ресурса (MyUser). Он проверяет нормально и, кажется, сохраняет объект, однако при запросе базы данных изменения не были сохранены.

class UserSignupView(generics.UpdateAPIView):
  serializer_class = MyUserSerializer

  def get_object(self, email):
    obj = MyUser.objects.get(email=email)
    self.check_object_permissions(self.request, obj)
    return obj

  def patch(self, request):
    print(request.user)
    user = self.get_object(request.user.email)
    print(user.street)
    serializer = MyUserSerializer(user, data=request.data, partial=True)
    serializer.is_valid(raise_exception=True)
    serializer.save()
    savedUser = MyUser.objects.get(email=request.user.email)
    print(savedUser.street)
    print(serializer.data)
    return Response(serializer.data)


class MyUserSerializer(serializers.ModelSerializer):
  class Meta:
    model = MyUser
    fields = (
        'id', 'first_name', 'last_name', 'email', 'phone_number', 'street', 'locality', 'city',
        'county', 'postcode')

Глядя на распечатки, я получаю:
user@example.com
Ни один
Улица Фейка 123
MyUser объект

Возвращает правильные сериализованные данные, которые содержат изменения, но база данных не содержит изменений. Соединение с базой данных в порядке, так как я могу запросить его и сделать другие операции чтения / записи / и т.д. Он почти такой же, как UpdateModelMixin, за исключением того, что мне пришлось переопределить get_object с переданным параметром.

1 Ответ

0 голосов
/ 29 июля 2019

Попробуйте переопределить метод обновления и посмотрите, что произойдет:

class MyUserSerializer(serializers.ModelSerializer):
      class Meta:
        model = MyUser
        fields = (
            'id', 'first_name', 'last_name', 'email', 'phone_number', 'street', 'locality', 'city',
            'county', 'postcode')

       def update(self, instance, validated_data):       
        instance.first_name = validated_data.get('first_name',instance.first_name)
        instance.last_name = validated_data.get('last_name',instance.last_name)
        instance.email = validated_data.get('email',instance.email)
        instance.phone_number = validated_data.get('phone_number',instance.phone_number)
        instance.street = validated_data.get('street',instance.street)
        instance.locality = validated_data.get('locality',instance.locality)
        instance.city = validated_data.get('city',instance.city)
        instance.county = validated_data.get('county',instance.county)
        instance.postcode = validated_data.get('postcode',instance.postcode)
        instance.save()
        return instance
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...