django - 如何为规范化数据库构建序列化程序
问题描述
也许我的问题已经得到解答,但我找不到任何东西。假设我使用 Django + Django REST 作为后端构建了一个库存系统。为了提供这个,我有这两个模型:
class Shoe(models.Model):
_id = models.AutoField(primary_key=True)
description = models.CharField(null=False, blank = False)
provider = models.CharField(null=False, blank=False)
category = models.CharField(choices=CATEGORIES, null=False, blank=False)
class Sizes(models.Model):
shoe_id = models.ForeignKey(Shoe, on_delete=models.CASCADE)
size = models.IntegerField(choices=SIZE_LIST, null=False, blank=False)
amount = models.IntegerField(null=False,default=0)
我的疑问是,我如何(使用 ModelViewSet,根据我对 DRF 的经验是最简单的方法)像这样提供 JSON 文件:
[
{
"_id": "1",
"description": "Air Max Black",
"provider": "NIKE",
"category": "Casual",
"available_sizes": {36: 400, 37: 250}, #size: amount
"amount": "650" #total amount
},
]
根据我对 DRF 在 JSON 中“加入”两个模型的理解,我应该编写一个自定义序列化程序,对吗?通常我的序列化器就像
class FooSerializer(serializers.ModelSerializer):
class Meta:
model = Foo
fields = ['some_stuff_here']
请帮助我或推荐我这样做的阅读材料,我已经阅读了有关序列化程序的 DRF 文档,但无法理解如何做这样的事情。
解决方案
您可以只使用嵌套关系:
class ShoeSerializer(serializers.ModelSerializer):
class Meta:
model = Shoe
fields = '__all__' # all for all fields, or a tuple with the fields
class SizeSerializer(serializers.ModelSerializer):
shoe = ShoeSerializer(many=True, read_only=True)
class Meta:
model = Size
fields = '__all__'
但我相信你的模型是倒置的,如果你想带鞋实例的大小,也许size
应该是模型上的 fk ?shoe
如果是这种情况,只需反转序列化程序。
推荐阅读
- c++ - 在 C++ 中读取多个文件
- spring-boot - 弹簧电抗器并联磁通卡死
- c++ - C 代码中的 C++ 代码中的 sizeof 类作为编译时间常数
- vue.js - 在 element-ui 中呈现自定义标题以显示引导工具提示?
- php - 详情页多维数组
- ffmpeg - 使用 AVIOContext 增量探测/读取流
- linux - 在 Linux 上交叉编译 ARM 可移植可执行文件
- javascript - How to find length of array of sets in Javascript?
- python - 附加一个带有分配给变量的列表的列表会产生多次相同最终版本的变量的输出
- c# - 消费者对象选择 .NET Core 中依赖项的选项的选项模式