Django 4.1 - Issues with Serializing Nested Serializer with Dynamic Fields Based on Request
I'm wondering if anyone has experience with I'm trying to implement I'm following best practices but After trying multiple solutions online, I still can't figure this out... I'm working with Django REST Framework (DRF) and I've run into an issue when trying to serialize nested serializers with dynamic fields. I have a `Post` model that contains multiple `Comment` instances as a related field. Depending on the user's permissions, I want to include or exclude certain fields in the `CommentSerializer`. Here's what my serializers look like: ```python class CommentSerializer(serializers.ModelSerializer): class Meta: model = Comment fields = ['id', 'content', 'created_at', 'author'] # 'author' should be dynamic based on user permissions class PostSerializer(serializers.ModelSerializer): comments = CommentSerializer(many=True, read_only=True) class Meta: model = Post fields = ['id', 'title', 'comments'] ``` In my view, I'm trying to modify the fields of the `CommentSerializer` based on whether the user has permission to view the 'author' field: ```python class PostDetailView(APIView): def get(self, request, pk): post = get_object_or_404(Post, pk=pk) serializer = PostSerializer(post, context={'request': request}) return Response(serializer.data) ``` I attempted to modify the `CommentSerializer` to adjust its fields based on the context, like so: ```python class CommentSerializer(serializers.ModelSerializer): class Meta: model = Comment fields = ['id', 'content', 'created_at'] # Default fields def __init__(self, *args, **kwargs): user = kwargs.pop('user', None) super().__init__(*args, **kwargs) if user and user.has_perm('view_author'): self.fields['author'] = serializers.CharField(source='author.username') # Add 'author' field ``` But when I try to access the `PostDetailView`, I get a `TypeError` that says `__init__() got an unexpected keyword argument 'user'`. I've ensured that the view passes the request context correctly. Any ideas on how I can properly pass the user to the `CommentSerializer` so it can dynamically adjust the fields? This is the error message I'm getting: ``` TypeError: __init__() got an unexpected keyword argument 'user' ``` I am using Django 4.1 with Django REST Framework 3.12. Help would be greatly appreciated! My development environment is Windows. Is there a simpler solution I'm overlooking? Is there a simpler solution I'm overlooking? My team is using Python for this service. What's the correct way to implement this?