частичное_обновление, только если не существует (PATCH Django Rest Framework) - PullRequest
0 голосов
/ 28 сентября 2019

В настоящее время я использую part_update для обновления информации, но я хочу обновить ее, только если это конкретное поле пусто.

views.py

class TitleViewSet(mixins.RetrieveModelMixin, mixins.ListModelMixin, mixins.UpdateModelMixin, viewsets.GenericViewSet):

    authentication_classes = [TokenAuthentication]
    permission_classes = [IsAuthenticated]

    queryset = Title.objects.all()
    serializer_class = TitleSerializer


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

serializers.py

class TitleSerializer(serializers.HyperlinkedModelSerializer):

    class Meta:
        model = Title
        fields = ['pk', 'name', 'steam_appid', 'website', 'twitter']

Так что вместо обновления, например, поле 'twitter'.Я ТОЛЬКО хочу обновить, если он пуст.Также я не хочу указывать «твиттер» в качестве поля, так как у меня есть еще много.

1 Ответ

0 голосов
/ 28 сентября 2019

Нашел решение, он в основном проверяет, является ли атрибут пустым, если его нет, он ничего не делает.Если он пуст, он обновит его.

class TitleSerializer(serializers.HyperlinkedModelSerializer):

    class Meta:
        model = Title
        fields = ['pk', 'name', 'steam_appid', 'website', 'twitter']

    def update(self, instance, validated_data):
        for attr, value in validated_data.items():
            if not getattr(instance, attr):
                setattr(instance, attr, value)
        instance.save()
        return instance
...