Использование 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
классе