我有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只提供一个模型序列化程序吗?如果是,请建议我怎么做。
发布于 2022-10-25 06:53:54
You can create a generic BaseModelSerializer [drf-doc] for this:
class BaseModelSerializer(serializers.ModelSerializer):
class Meta:
fields = '__all__'
and then use this as base class for the serializers of the concrete models:
class SerialModel1(BaseModelSerializer):
class Meta:
model = Model1
class SerialModel2(BaseModelSerializer):
class Meta:
model = Model2
This will inherit the fields specification, and override the model, so effectively configuring a serializer for the respective model, but reusing the field specification.
You can of course extend the BaseModelSerializer with extra fields, or override fields if necessary.
Note that normally a ModelSerializer is in fact already a "generic" serializer, in the sense that it can serialize any model you specify in the Meta class. So in a way, using a BaseModelSerializer is "overengineering" a bit, but it can prevent repeating code.https://stackoverflow.com/questions/74182401
复制相似问题