动态更改串行器使用的字段的最佳方法是什么?

时间:2018-08-07 21:20:15

标签: python django rest serialization django-rest-framework

我有一个DRF序列化器,我想将其用于多种用途。它应该能够更新,创建和排他地验证(不保存)。创建和更新我没有问题,验证时遇到了问题。在验证的同时,我需要创建对象的实例,并将序列化的对象返回给客户端。但是,我不想使用我在验证时创建保存实例时通常使用的所有字段。另外,我只希望能够创建一个实例并继续前进。

我当前的解决方案是使用rest_flex_fields'FlexFieldsModelSerializer。这似乎工作正常,但是当我尝试创建实例而不实际保存它时,它无法创建实例并返回None

我重写了create函数,如下所示:

def create(self, validated_data):
    instance = ModelClass(**validated_data)
    return instance

但是instance始终是None。我不知道为什么。

这就是我的观点:

if serializer.is_valid(raise_exception=True):
    instance = serializer.create(serializer.validated_data)
    return MySerializer(instance).data

但是,如果instanceNone,那将永远无法工作。

所以我想这里的TL; DR是:

  1. 我动态使用不同字段的方法是否有效?
  2. 为什么尝试创建一个实例会返回None但保存一个实例却不会返回?

1 个答案:

答案 0 :(得分:0)

将您的 create() 方法更改为

def create(self, validated_data):
    instance = ModelClass.objects.create(**validated_data)
    return instance

除非您create()模型实例,否则可能None