我有 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 提供一个模型序列化器吗?如果是的话,请建议我该怎么做。
您可以为此创建一个通用的
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
有点“过度设计”,但它可以防止重复代码。