0

I am trying to update a single value in the custom user model class. My model class is :

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

in my views.py I am trying to update the is_verified from false to 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

I am not very sure how to do so. Any help will be highly appreciated. Thanks!

Piyush
  • 492
  • 5
  • 22
  • Does this answer your question? [Django Rest Framework partial update](https://stackoverflow.com/questions/41110742/django-rest-framework-partial-update) – Harun Yilmaz Dec 26 '19 at 06:57
  • I have already checked that link. It didn't solved my issue – Piyush Dec 26 '19 at 07:00

1 Answers1

0

you have to use the generic viewsets

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")

you can do same thing with generics also

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

or simply you can user 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')


aman kumar
  • 3,086
  • 1
  • 17
  • 24