使用 partial_update 时如何更新另一个字段?
How to update another field when using partial_update?
我在我的用户模型上使用 partial_updates,我希望在 partial_update 发生时将用户模型实例上的 is_active
更改为 True - 即使 is_active
没有暴露给端点。我的 class 看起来像这样:
class UserInvitationUpdate(mixins.UpdateModelMixin, generics.GenericAPIView):
serializer_class = serializers.UserSerializer
queryset = User.objects.all()
def get(request, *args, **kwargs):
username = kwargs.get('username')
token = kwargs.get('token')
return activated_user(username, token)
def get_object(self):
username = self.kwargs.get('username')
user = User.objects.get(username=username)
return user
def put(self, request, *args, **kwargs):
username = self.kwargs.get('username')
token = self.kwargs.get('token')
if my_if_statement_is_true:
# TODO set user to active
# how do I set is_active = True for the user model instance?
return self.partial_update(request, *args, **kwargs)
你有多种方法来处理这个问题。您可以更改序列化程序 .save()
方法并手动将字段 is_active 设置为 true,或者通过更新视图的 perform_update()
方法在视图中设置它:
def perform_update(self, serializer):
serializer.save(is_active=True)
更多信息here
我在我的用户模型上使用 partial_updates,我希望在 partial_update 发生时将用户模型实例上的 is_active
更改为 True - 即使 is_active
没有暴露给端点。我的 class 看起来像这样:
class UserInvitationUpdate(mixins.UpdateModelMixin, generics.GenericAPIView):
serializer_class = serializers.UserSerializer
queryset = User.objects.all()
def get(request, *args, **kwargs):
username = kwargs.get('username')
token = kwargs.get('token')
return activated_user(username, token)
def get_object(self):
username = self.kwargs.get('username')
user = User.objects.get(username=username)
return user
def put(self, request, *args, **kwargs):
username = self.kwargs.get('username')
token = self.kwargs.get('token')
if my_if_statement_is_true:
# TODO set user to active
# how do I set is_active = True for the user model instance?
return self.partial_update(request, *args, **kwargs)
你有多种方法来处理这个问题。您可以更改序列化程序 .save()
方法并手动将字段 is_active 设置为 true,或者通过更新视图的 perform_update()
方法在视图中设置它:
def perform_update(self, serializer):
serializer.save(is_active=True)
更多信息here