【问题标题】:What is the best way to manage custom serializer in DRF在 DRF 中管理自定义序列化程序的最佳方法是什么
【发布时间】:2017-02-04 12:00:47
【问题描述】:

我有一个自定义序列化程序,其中包含一些其他模型序列化程序、数据字段和一些列表字段,用于管理多对多关系。这是一个例子。

class CustomSerializer(serializers.Serializer):
    a_model_serializer = AModelSerializer()
    b_model_serializer = serializers.ListField(child=CModelSerializer())
    another_field = serializers.CharField()

基于这个序列化程序,我必须通过第三个表创建一些模型对象和一些多对多关系。现在,处理这种情况的最佳方法是什么。

【问题讨论】:

  • 也许您可以使用SerializerMethodField 来更好地操作嵌套字段
  • @blueSurfer 我想你没有理解我的问题。在这个(CustomSerializer)序列化程序中,我必须创建一些模型实例和一些多对多关系。然后我必须使用 AModelSerializer 实例的 id 返回数据,然后必须管理序列化程序的更新。

标签: python django django-rest-framework


【解决方案1】:

为 serializers.Serializer 重写 create() 函数。要管理更新,请覆盖 update() 函数。

class CustomSerializer(serializers.Serializer):
    a_model_serializer = AModelSerializer()
    b_model_serializer = serializers.ListField(child=CModelSerializer())
    another_field = serializers.CharField()

    def create(self, validated_data):
       print(validated_data)
       # Do your custom create

    def update(self, instance, validated_data):
       print(validated_data)
       # Do your custom update

http://www.django-rest-framework.org/api-guide/serializers/#saving-instances

【讨论】:

  • 如果我采用这种方法,那么我如何在视图中使用这个序列化程序以及什么样的方便?最后,我将如何从 create 和 update 方法返回值?
  • 好吧,如果您使用的是 DRF,那么当您向 Web 服务器发送 HTTP POST 或 PUT 请求时将调用这些函数。它将向您指定的 Viewset 的 URL 发送一个请求,该请求将调用序列化程序类以使用数据创建或更新。
猜你喜欢
  • 2018-08-22
  • 2023-01-24
  • 2021-06-09
  • 2022-11-19
  • 1970-01-01
  • 1970-01-01
  • 2010-11-20
  • 2021-10-24
  • 2012-10-30
相关资源
最近更新 更多