class SEOOptimizationView(generics.RetrieveUpdateAPIView):
    """
    View for managing SEO optimization of blog posts.
    Allows retrieval and updating of meta tags, descriptions, and slugs.
    """
    queryset = BlogPost.objects.all()
    serializer_class = SEOSerializer
    lookup_field = 'slug'
    permission_classes = [permissions.IsAuthenticatedOrReadOnly]
    authentication_classes = [AdminJWTAuthentication]

    def get_object(self):
        blog_post = super().get_object()
        if not hasattr(blog_post, 'seo'):
            SEO.objects.create(blog_post=blog_post)
        return blog_post.seo

    def update(self, request, *args, **kwargs):
        partial = kwargs.pop('partial', False)
        instance = self.get_object()
        serializer = self.get_serializer(instance, data=request.data, partial=partial)
        serializer.is_valid(raise_exception=True)


        if 'slug' in request.data:
            del request.data['slug']

        self.perform_update(serializer)
        return Response(serializer.data)