【发布时间】:2019-07-20 11:47:32
【问题描述】:
我有一个用于几个端点(generics.ListAPIView)的序列化程序,但在其中一个端点中我需要隐藏一个序列化程序字段。我宁愿不写一个新的序列化程序来覆盖这种情况。
从 DRF 3.0 开始,我们有用于序列化程序的动态字段 (https://www.django-rest-framework.org/api-guide/serializers/#dynamically-modifying-fields),但我在完全理解如何使用它们时遇到了一些麻烦。
我创建了这个序列化程序:
class TestSerializer(DynamicFieldsModelSerializer):
user_req = UserSerializer(read_only=True)
user_tar = UserSerializer(read_only=True)
class Meta:
model = TestAssoc
fields = ("user_req", "user_tar")
这是我的终点:
class TestEndpointListAPIView(generics.ListAPIView):
serializer_class = TestSerializer
permission_classes = [IsAuthenticated]
lookup_field = 'test_username'
def get_queryset(self):
return ...
现在我需要从输出中隐藏“user_tar”字段,根据文档,我应该使用以下内容实例化序列化程序:
TestSerializer(fields=('user_req'))
但是我应该如何在我的 TestEndpointListAPIView 中执行此操作?我应该覆盖 get_serializer 吗?
感谢您的帮助
编辑:
通过覆盖 get_serialized 函数,我找到了以下解决方案:
def get_serializer(self, *args, **kwargs):
serializer_class = self.get_serializer_class()
kwargs['context'] = self.get_serializer_context()
kwargs['fields'] = ['user_req']
return serializer_class(*args, **kwargs)
我想知道这是否是一个好的解决方案。谢谢!
【问题讨论】:
标签: django python-3.x django-rest-framework