Использование UpdateModelMixin update() для обновления записи

Как выполнить частичное обновление в list()? Я пытаюсь обновить значение баланса в записи Wallet

class WalletListCreateAPIView(generics.ListCreateAPIView, mixins.UpdateModelMixin):
    queryset = Wallet.objects.all()
    serializer_class = WalletSerializer

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

    def list(self, request, *args, **kwargs):
        current_user = request.user
        wallets = Wallet.objects.filter(user=current_user)
        balances = get_wallet_balances([wallet.address for wallet in wallets])
        for wallet in wallets:
            # Update wallet balance based on address
            balance = balances[wallet.address]
            
        return super().list(request, *args, **kwargs)

Вам просто нужно создать функцию put() внутри вашего представления, наследуя GenericAPIView и UpdateModelMixin

class MyView(GenericAPIView, UpdateModelMixin):

    serializer_class = MySerializer
    queryset = MyModel.objects.all()
    lookup_field = 'id'

    def put(self, request, *args, **kwargs):

        return self.update(request, *args, **kwargs)

Вы должны создать свой сериализатор, содержащий только те поля, которые вы хотите обновить

serializers.py:

class MySerializer(serializers.ModelSerializer):
    class Meta:
        model = MyModel
        fields = ["field_1", "field_2", "field_3"]

Примите во внимание, что любое поле, которое в модели имеет null=False, будет обязательным, а не опциональным

При редактировании записи все необязательные поля, которым не присвоено новое значение, будут установлены в null.

Вы можете уклониться от этого, добавив

extra_kwargs = {"field": {"required": False}}

в твоем Meta классе

Вернуться на верх