PATCH не работает django остальные рамки - PullRequest
1 голос
/ 12 января 2020

Я выполняю CRUD, все конечные точки работают, кроме обновления (патча). Получение

KeyError at /apponboarding/app/1/
'email'

, если я передаю только поле, которое я хочу обновить. Любая помощь высоко ценится.

viewset

class AppOnboardingView(viewsets.ModelViewSet):
    queryset = AppOnboarding.objects.all()
    serializer_class = AppOnboardingSerializer
    lookup_field='id'
    authentication_classes = [SessionAuthentication, BasicAuthentication]
    permission_classes = [IsAuthenticated,IsMaintainer]

сериализатор

class AppOnboardingSerializer(serializers.ModelSerializer):
    class Meta:
        model = AppOnboarding
        fields = ['id', 'email', 'product_name', 'password']
        extra_kwargs = {'password': {'write_only': True}}

    def create(self, validated_data):
        app_onboard = AppOnboarding(
            email=self.validated_data['email'],
            product_name=self.validated_data['product_name']
        )
        password = self.validated_data['password']

        app_onboard.set_password(password)
        app_onboard.save()

    def save(self):
        app_onboard = AppOnboarding(
            email=self.validated_data['email'],
            product_name=self.validated_data['product_name']
        )
        password = self.validated_data['password']

        app_onboard.set_password(password)
        app_onboard.save()

1 Ответ

0 голосов
/ 12 января 2020

Попробуйте переопределить метод part_update

 class AppOnboardingSerializer(serializers.ModelSerializer):
    class Meta:
        model = AppOnboarding
        fields = ['id', 'email', 'product_name', 'password']
        extra_kwargs = {'password': {'write_only': True}}

    def create(self, validated_data):
        app_onboard = AppOnboarding(
            email=self.validated_data['email'],
            product_name=self.validated_data['product_name']
        )
        password = self.validated_data['password']

        app_onboard.set_password(password)
        app_onboard.save()

    def save(self):
        app_onboard = AppOnboarding(
            email=self.validated_data['email'],
            product_name=self.validated_data['product_name']
        )
        password = self.validated_data['password']

        app_onboard.set_password(password)
        app_onboard.save()

    def partial_update(self, request, *args, **kwargs):
        kwargs['partial'] = True
        return self.update(request, *args, **kwargs)
...