django - 如何使用嵌套序列化来序列化和反序列化数据?django-rest-framework
问题描述
我有以下序列化程序:
class UserSerializer(ModelSerializer):
class Meta:
model = User
fields = ('id', 'username', 'password')
class ProfileSerializer(ModelSerializer):
user = UserSerializer()
class Meta:
model = Profile
fields = ('id', 'user', 'name', 'address')
当我想创建个人资料时,我应该发送以下数据:
{
"user":{
"username": "test_username",
"password": "123456789"
},
"name": "David",
"address": "Baker St"
}
我的问题是,"user": 5
在 POST 请求的情况下是否可以只发送而不是发送字典?
解决方案
您有两个选择,您可以使用两个不同的序列化程序来检索和创建这样的
class ProfileCreateSerializer(ModelSerializer):
class Meta:
model = Profile
fields = ('id', 'user', 'name', 'address')
和
class ProfileRetrieveSerializer(ProfileCreateSerializer):
user = UserSerializer()
并决定在视图中使用哪个序列化程序(提示:覆盖get_serializer_class
方法)
或者
使用一个序列化器并根据操作类型决定字段类型:
class ProfileCreateSerializer(ModelSerializer):
class Meta:
model = Profile
fields = ('id', 'user', 'name', 'address')
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
if self.context['request'].method == 'GET': # or whatever condition you want to use
self.fields['user'] = UserSerializer()
推荐阅读
- python-3.x - Windows 10 上 python 3.x 中的蓝牙发现/监控
- c++ - 在 std::bind 上使用 std::apply
- python - PyArray_SimpleNewFromData
- json - 使用 postgres 查询嵌套的 jsonb
- python - 列表被识别为元组
- javascript - 如何从相对 URL 获取 Css 背景图像 URL 文本?
- arrays - Swift 乘法数组索引
- r - Linux 问题发生在 Windows 上?“致命错误:fftw3.h:没有这样的文件或目录”
- java - java - Hashset 包含重复项?
- python - 查找重叠期间之间的月数 - 熊猫