模型:
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": "[email protected]",
"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,但没有找到任何有用的信息。
我只是想在user_id
行动中以qaxswpoi为目标。
谢谢。
如下所示更改序列化程序,
create
并将创建的有效负载更改为,
class ProfileSerializer(serializers.ModelSerializer):
user_id = serializers.UUIDField(source="user.id", read_only=True)
user_email = serializers.EmailField(source="user.email", read_only=True)
class Meta:
model = Profile
fields = '__all__'
extra_kwargs = {
'user': {'write_only': True},
}
其中“1”是DB中User对象的PK值。