我有一个像这样的序列化程序:
class datasetColumnSerializer(serializers.ModelSerializer):
custom_target = target_serializers.CustomTargetSerializer()
class Meta:
model = dataset_models.DataSetColumn
custom_target
使用以下序列化程序:
我正在传回一个对象,它包含我想为其设置的custom_target
。验证序列化程序并保存它时:
serializer = serializers.DataSetColumnSerializer(column, data=request.DATA)
if serializer.is_valid():
serializer.save()
custom_target
序列化程序正在创建一个新的CustomTarget
,而不是将该DataSetColumn
的custom_target
设置为传入的对象。我尝试将CustomTargetSerializer
设置为只读。这在某种意义上是有效的,它不创建一个新的CustomTarget
,但也不将custom_target
设置为对象。在
如何在序列化的DataSetColumn
对象上使用serializer.save()
将custom_target
设置为传入的嵌套对象,而不是从嵌套对象创建新对象?在
在我看来,最符合REST框架的解决方案是分别使用嵌套序列化器和}对象作为POST参数来关联{}。在
PrimaryKeyRelatedField
。有了它,您可以接收CustomTarget
嵌套对象作为custom_target
,并可以在创建时通过其ID将{但是,您将得到两个属性},这两个属性可能并不理想。作为通用解决方案,可以实现自定义字段。在
custom_target
和{通用方法:自定义相关字段
^{pr2}$将其用作:
这是一种相当“肮脏”的方法:
在预保存处理程序中,您可以重置自定义目标以仅拥有id。如下所示:
现在想不出更好/更干净的解决方案,但如果我找到了,我会写下来:)
相关问题 更多 >
编程相关推荐