【发布时间】:2019-09-16 08:30:03
【问题描述】:
型号:
class Profile(models.Model):
user = models.ForeignKey(User)
occupation = models.CharField()
序列化器:
class ProfileSerializer(serializers.ModelSerializer):
user_id = serializers.UUIDField(source="user.id")
user_email = serializers.EmailField(source="user.email", read_only=True)
user = serializers.UserSerializer(read_only=True)
class Meta:
model = Profile
当我使用retrieve 操作(即/profiles/1/)点击 API 时,它可以正常工作
示例响应:
{
"user_id": "user_1",
"user_email": "human@earth.com",
"occupation": "software engineer",
"user": {
"id": "user_1", "first_name": "", ....
}
}
但是当我尝试通过提供如下数据来创建资源时:
{
"user_id": "user_2",
"occupation": "network engineer"
}
user_id 字段在服务器端变为 {"user": {"uuid": "requested_user_id"}},如下所示:
{
"user": {
"uuid": "user_2"
},
"occupation": "network engineer",
}
而不是
{
"user_id": "user_2",
"occupation": "network engineer",
}
我通过记录serializer.validated_data对此进行了调试。
从 DRF 的角度来看,这是否是期望的行为? 有什么简单的方法可以防止这种情况发生吗? (如字段中的额外 arg 不会更改原始定义的字段名称)
我查看了文档中的core arguments,但没有发现任何帮助。
我只想在视图集下的create 操作中定位user_id。
谢谢。
【问题讨论】:
标签: django django-rest-framework deserialization serialization