当前位置: 首页 > 面试题库 >

在Django REST框架序列化程序中动态排除或包含字段

夔博
2023-03-14
问题内容

我在Django REST框架中有一个序列化器,定义如下:

class QuestionSerializer(serializers.Serializer):
    id = serializers.CharField()
    question_text = QuestionTextSerializer()
    topic = TopicSerializer()

现在,我有两个使用上述序列化器的API视图:

class QuestionWithTopicView(generics.RetrieveAPIView):
    # I wish to include all three fields - id, question_text
    # and topic in this API.
    serializer_class = QuestionSerializer

class QuestionWithoutTopicView(generics.RetrieveAPIView):
    # I want to exclude topic in this API.
    serializer_class = ExamHistorySerializer

一种解决方案是编写两个不同的序列化器。但是必须有一个更简单的解决方案,以有条件地从给定的序列化器中排除字段。


问题答案:

你尝试过这种技术

class QuestionSerializer(serializers.Serializer):
    def __init__(self, *args, **kwargs):
        remove_fields = kwargs.pop('remove_fields', None)
        super(QuestionSerializer, self).__init__(*args, **kwargs)

        if remove_fields:
            # for multiple fields in a list
            for field_name in remove_fields:
                self.fields.pop(field_name)

class QuestionWithoutTopicView(generics.RetrieveAPIView):
        serializer_class = QuestionSerializer(remove_fields=['field_to_remove1' 'field_to_remove2'])

如果没有,请尝试一下。



 类似资料:
  • 主要内容:使用excludeFieldsWithModifiers()方法,使用@Expose注解默认情况下,GSON排除序列化/反序列化过程中的瞬态和静态字段。 我们来看看下面的例子。 示例 创建一个名为的Java类文件:GsonTester.java - 执行上面示例代码,得到以下结果 - 使用excludeFieldsWithModifiers()方法 GsonBuilder使用序列化/反序列化过程中的方法提供对使用特定修饰符排除字段的控制。 看下面的例子。 示例 创建一个名为的Java

  • 我有一个引用泛型关系的模型,我想以详细的方式序列化它。 我希望ToSeriize视图集的列表方法的JSON看起来像: 有没有办法让ToSeriize对象的视图集的序列化器基于content_type/object_id产生“条件字段”来实现这种效果?

  • 如果发生错误,数据栏将是这样的字符串: 如果成功,数据字段将是一个对象: 我使用以下Kotlin代码对其进行反序列化: 模型定义如下: 当没有错误发生时,上面的代码工作正常。但是当错误发生时,会引发异常: 有没有办法将字段反序列化为对象或任何对象,并通过代码手动确定其类型?

  • 问题内容: 我有一个包含a 和a的类。现在,我想使用gson序列化对象,但排除该字段。 如您所见,我已经尝试使用,但是似乎没有任何作用。另外,我已经将该字段设置为私有,因为我认为这会“覆盖” 但运行以下代码: 仍然会导致以下文件内容没有错误: 那我在做什么错?我现在一无所知,并且希望得到任何帮助,因为这似乎行不通。 提前致谢。 问题答案: 为了获得此结果,您需要使用注释所有字段: 并将Gson配置

  • 问题内容: 我有一个包含以下详细信息的列表: 现在,我想对该列表进行排序,以使这些值按以下顺序排列: 显然,这样做并不能给出正确的答案-它给出了: 我假设这是因为python直接将所有这些都视为字符串。但是,我想根据它们的数值FIRST对它们进行排序,然后根据数字后面的字符对它们进行排序。 我该如何进行? 非常感谢 :) 问题答案: 您想使用 自然排序 : 用法示例: 通过将元素拆分为多个列表以分

  • 默认情况下,GSON从序列化/反序列化过程中排除瞬态和静态字段。 我们来看看下面的例子。 例子 (Example) 在C:\“GSON_WORKSPACE中创建名为GsonTester的Java类文件。 File: GsonTester.java import com.google.gson.Gson; import com.google.gson.GsonBuilder; public c