如何为规范化数据库构建序列化器

时间:2019-05-23 17:02:44

标签: django django-rest-framework

也许我的问题已经回答了,但是我什么也找不到。 可以说,我使用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文档,但无法理解如何进行此类操作。

1 个答案:

答案 0 :(得分:3)

您可以只使用nested relation

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应该是shoe模型的代名词?如果是这种情况,只需反转序列化器即可。