python-3.x - 如何使用 UUID PrimaryKeyRelatedField 创建嵌套的 DRF 序列化程序?
问题描述
我已经简化/最小化了这里的示例(删除了指定模型和所有字段的类元,删除了一些其他显式字段),但它与用例匹配并复制了观察到的行为。
class MainSerializer(ModelSerializer):
a = ASerializer(required=False, many=True)
def create(self, validated_data):
a_data = validated_data.pop("a", None)
main_instance = super().create(validated_data)
if a_data is None:
return main_instance
for a in a_data:
a["main_relation"] = main_instance
a_serializer = ASerializer(data=a, many=True)
a_saved = None
if a_serializer.is_valid():
a_serializer.save()
a_saved = a_serializer.data
else:
a_saved = a_serializer.errors
return {
**self.data,
"a": a_saved.data()
}
class ASerializer(ModelSerializer):
main_relation = PrimaryKeyRelatedField(queryset=ModelB.objects.all(),
required=False, allow_null=True, default=None)
最终在它说的字符串表示没有属性MainSerializer#create
的地方抛出一个错误,但是当通过调试器运行时,实例肯定同时具有和属性,并且两者的值与预期的相同。那么出了什么问题呢?PrimaryKeyRelatedField#to_representation
main_instance
pk
pk
uid
附带问题:如果不是返回字典,而是main_instance
在两种情况下都返回,视图集是否会返回MainSerializer#data
实例的完整表示(根据它的序列化程序包含的嵌套关系)?如果嵌套的序列化程序有错误,它们会通过该数据出现吗?或者这样的事情是否需要扩展 drf 功能?
解决方案
推荐阅读
- winapi - 如何将 IMFSample 从 Windows Duplication API 编码为 H264?
- arduino - XMLHTTP --- ERR_CONNECTION_RESET
- javascript - 在 React 中显示单击元素的详细信息
- javascript - Jquery函数检查图像的SRCset是否完成加载
- asp.net-core - Net Core 3.1 中的 DpapiDataProtectionProvider 替代方案
- c# - Visual Studio 社区上的不兼容目标框架
- php - Laravel 6.10 -> 路由 [admin.dashboard] 未定义。但其他路线正在运行
- operating-system - 为什么虚拟到物理内存地址转换需要专门的硬件而不是文件路径解码?
- python - 返回一个
使用 random.choices() - javascript - 如何从异步函数返回值