【发布时间】:2017-03-26 03:01:55
【问题描述】:
我正在阅读 Django REST Framework,我有一个使用 SerializerMethodField() 的 getter 序列化模型。
但是,当我 POST 到此端点时,我也希望能够设置此字段,但这不起作用,因为如上面的文档所示,您无法写入 SerializerMethodField。 Django REST 中是否有任何方法可以让您定义一个自定义 getter 方法和一个自定义 setter 方法的序列化器字段?
编辑:这是我正在尝试做的事情的来源。客户与用户是一对一的关系。
class ClientSerializer(serializers.ModelSerializer):
email = serializers.SerializerMethodField()
def create(self, validated_data):
email = validated_data.get("email", None) # This doesn't work because email isn't passed into validated_data because it's a readonly field
# create the client and associated user here
def get_email(self, obj):
return obj.user.email
class Meta:
model = Client
fields = (
"id",
"email",
)
【问题讨论】:
-
是的,这就是我要问的。它说您不能在其中一个 cmets 中真正接受 POST 上的 serializermethodfield 的数据,但我问是否有办法在 Django REST 中做到这一点,可能不使用 serializermethodfield
-
您应该发布源代码以供您使用 django rest 序列化程序方法。为什么不只使用普通的序列化器字段?您不能将方法序列化程序用于发布请求,因为它是只读字段
-
好的,我添加了我的代码。如何修改它以接受 POST 请求中的电子邮件?
标签: django rest django-rest-framework serialization