我们可以为具有相同字段的多个模型提供一个模型序列化器吗? Django Rest 框架

问题描述 投票:0回答:1

我有 5 个模型,它们具有从基本模型继承的相同字段。现在,对于所有五个模型,我有 5 个序列化器序列化各自模型的所有字段。设置示例如下

基础型号

class BaseModel(models.Model):

  field 1
  field 2

** 型号 1**

class Model1(BaseModel):
   field 3 = models.Charfield(choices=CHOICES)

型号2

class Model 2(BaseModel)
 field 3 = models.Charfield(choices=CHOICES)

因此 field3 在两个模型中都很常见,但在其中有不同的选择,因此被放置在不同的模型中,而不是在基本模型中。

序列化器

class SerialModel1(serializers.ModelSerializer):
    class Meta:
        model = Model1
        fields = "__all__"
class SerialModel2(serializers.ModelSerializer):
    class Meta:
        model = Model2
        fields = "__all__"

如图所示,即使模型具有相同的字段,我也需要使用不同的模型序列化器。

问题

我可以为 Model1 和 Model2 提供一个模型序列化器吗?如果是的话,请建议我该怎么做。

python django django-rest-framework django-serializer
1个回答
0
投票

您可以为此创建一个通用的

BaseModelSerializer
Django REST Framework 文档):

    class BaseModelSerializer(serializers.ModelSerializer):
        class Meta:
            fields = '__all__'

然后使用它作为具体模型的序列化器的基类:

    class SerialModel1(BaseModelSerializer):
        class Meta:
            model = Model1

    class SerialModel2(BaseModelSerializer):
        class Meta:
            model = Model2

这将继承字段规范,并覆盖模型,因此可以有效地为相应模型配置序列化器,但重用字段规范。

您当然可以使用额外字段扩展

BaseModelSerializer
,或者在必要时覆盖字段。

请注意,通常

ModelSerializer
实际上已经是一个“通用”序列化器,从某种意义上说,它可以序列化您在
Meta
类中指定的任何模型。所以在某种程度上,使用
BaseModelSerializer
有点“过度设计”,但它可以防止重复代码。

© www.soinside.com 2019 - 2024. All rights reserved.