python - 在单个序列化程序 django 中读取和创建嵌套关系
问题描述
我有两个模型类别和产品,以及它们之间的经典一对多关系。每个产品都属于一个类别。
我正在使用 Django-Rest-Framework。
我使用 ModelViewSet 作为 ViewSet 和 ModelSerializer 作为序列化器。
我创建了具有完整 CRUD 操作的 ProductViewSet。
我想要实现的是将关系包含在 READ 操作( list , retrieve )中。响应应该看起来像这样。
{
"id" : 2,
"name" : "foo product" ,
"category" : {
"id" : 4,
"name" : "foo relation"
}
}
所以我将 Meta 中的深度场设置为 1。
class ProductSerializer(ModelSerializer):
class Meta:
model = Product
exclude = ('createdAt',)
depth = 1
是什么使类别只读。但我希望它在其他操作(POST,PUT)中是可写的。
我知道我可以使用两个序列化解决问题,但这是一个重复的问题,我不想为我拥有的每个模型编写两个序列化。
我试图在序列化程序中添加 category_id 字段,但我必须重写 create 方法以使其正常工作。我再次尝试编写更少的代码。因为我最终会覆盖所有的应用程序序列化程序。
class ProductSerializer(ModelSerializer):
category_id = PrimaryKeyRelatedField(queryset=Category.objects.all())
class Meta:
model = Product
exclude = ('createdAt',)
depth = 1
def create(self, validated_data):
category_id = validated_data.pop('category_id').id
validated_data['category_id'] = category_id
return super().create(validated_data)
这是我的第一个 Django 框架,我正在努力使其尽可能整洁。
解决方案
推荐阅读
- ios - 为什么 UIButton 不返回正确的约束?
- java - Java,尝试根据命令长度创建特定的网络字节头
- intellij-idea - IntelliJ IDEA 快捷键切换2个字
- python - 当我使用 .append 时,MongoDB 每次第二次插入 null
- python - 无法正确下载嵌套表[编辑]
- python - 舍入Series中的值时出现decimal.InvalidOperation错误
- perl - 我使用 LWP::UserAgent 使用 cookie 有什么问题?
- c# - 可编辑组合框无上下文菜单
- regex - 忽略 Powershell RegEx 上的换行符
- vba - 文件重命名期间的 vba 运行时错误 75