【问题标题】:How to partial update the model class in django rest framework如何在 django rest 框架中部分更新模型类
【发布时间】:2020-04-16 11:43:03
【问题描述】:

我正在尝试更新自定义用户模型类中的单个值。我的模型类是:

class User(AbstractBaseUser, PermissionsMixin):
    """Custom user model that supports using email instead of username"""
    email = models.EmailField(max_length=255, unique=True)
    name = models.CharField(max_length=255)
    is_staff = models.BooleanField(default=False)
    is_verified = models.BooleanField(default=False)

    objects = UserManager()

    USERNAME_FIELD = 'email'

    def __str__(self):
        return self.name

在我的views.py中,我试图将is_verified从false更新为true

class VerifyUserEmail(generics.ListAPIView, mixins.UpdateModelMixin):
    serializer_class = UserSerializer

    def get_queryset(self):
        queryset = User.objects.all()
        key = self.request.query_params.get('key','')
        if key:
            email = encryption.decrypt(key)
            # Here I want to update the is_verified 
            return queryset.filter(email=email)
        else:
            return Response({'status':status.HTTP_401_UNAUTHORIZED,'Message':'Your token key is expired'})
        return queryset

我不太确定该怎么做。任何帮助将不胜感激。谢谢!

【问题讨论】:

标签: python-3.x django-rest-framework


【解决方案1】:

您必须使用通用视图集

class VerifyUserEmail(viewsets.ViewSet):

   @action(detail=False,methods=['patch'])
   def verify_email(self, request, *args, **kwargs):
     queryset = User.objects.all()
        key = self.request.query_params.get('key','')
        if key:
            email = encryption.decrypt(key)
            # Here I want to update the is_verified 
            user = queryset.filter(email=email).first()
            user.email_verfired = True
            user.save()
        else:
            print('No data found')
        return response.Response("ok")

你也可以用泛型做同样的事情

class VerifyUserEmail(generics.RetrieveUpdateAPIView):
   """ """
  def get_object(self):
     """ need to override this because by default it picks form url keyword """
      email = encryption.decrypt(key)
      # Here I want to update the is_verified 
      user = queryset.filter(email=email).first()
       return user
  def perform_update(self, serializer):
    # logic of update will go here

或者你可以简单地使用 APiView

class VerifyUserEmail(views.APIView):
  """ """
  def patch(self, request, *args, **kwargs):
    """ """
        queryset = User.objects.all()
        key = self.request.query_params.get('key','')
        if key:
            email = encryption.decrypt(key)
            # Here I want to update the is_verified 
            user = queryset.filter(email=email).first()
            user.email_verfired = True
            user.save()
        else:
            print('No data found')


【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-28
    • 2021-07-27
    • 2020-09-29
    • 1970-01-01
    • 2018-07-05
    • 2017-06-14
    • 2013-12-22
    • 1970-01-01
    相关资源
    最近更新 更多