我不明白Django-Rest-Framework序列化程序是如何工作的

Pyt*_*eat 9 django django-rest-framework

这可能看起来像一个愚蠢的问题,但我真的觉得Django-Rest-Framework并不能很好地解释它是如何工作的.有太多黑盒魔术混淆配置说明(在我看来).

例如,它说我可以在我的序列化器中覆盖创建或更新.因此,当我的视图发布时,我可以将数据发送到具有声明的更新方法的序列化程序.

class MySerializer(serializers.ModelSerializer):

    class Meta:
        model = MyModel

    def update(self, instance, validated_data):
Run Code Online (Sandbox Code Playgroud)

是否更新,当模型已存在只能得到打来电话,我们只是更新了一些它的数据呢?或者在创建新的时候调用create

如果我要将此方法添加到该类,

def create(self, validated_data):
        return MyObject.objects.create(**validated_data)
Run Code Online (Sandbox Code Playgroud)

这是否是为了添加新对象必须调用的方法?并且你的覆盖能力应该放在序列化器中,但如果没有声明,这是带有被调用参数的默认方法?

Kev*_*own 20

有太多黑盒魔术混淆配置说明(在我看来).

如果您认为文档中有某些内容可以改进,请随时提交带有更新的拉取请求.如果它看似合理,它可能会合并并显示在将来的版本中.

或者在创建新的时候调用create?

create在未使用模型实例初始化序列化程序时调用,但仅将数据传递给它.serializer.save()调用一次后,序列化程序会检查实例是否已传入并直接调用,create以便创建模型实例并将其保存在数据库中.

更新只在模型已经存在时才被调用,我们只是更新它的一些数据吗?

update使用模型实例(或其他对象)初始化序列化程序并调用时serializer.save()调用.这大致相当于与之Model.objects.update()相比Model.objects.create().

这是否是为了添加新对象必须调用的方法?

序列化器旨在使用中央serializer.save()方法保存(包括对象创建和更新).这类似于使用该model.save()方法保存或创建模型的方式.

并且你的覆盖能力应该放在序列化器中,但如果没有声明,这是带有被调用参数的默认方法?

建议重写create,并update在串行水平,如果你需要更改逻辑模型及其相关对象如何需要保存,例如使用嵌套串行工作时.