首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我们可以为具有相同字段的多个模型提供一个模型序列化程序吗?Django Rest框架

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

Stack Overflow用户
提问于 2022-10-24 14:09:10
回答 1查看 48关注 0票数 0

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

基模型

代码语言:javascript
复制
class BaseModel(models.Model):

  field 1
  field 2

**模式1**

代码语言:javascript
复制
class Model1(BaseModel):
   field 3 = models.Charfield(choices=CHOICES)

模型2

代码语言:javascript
复制
class Model 2(BaseModel)
 field 3 = models.Charfield(choices=CHOICES)

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

串行化器

代码语言:javascript
复制
class SerialModel1(serializers.ModelSerializer):
    class Meta:
        model = Model1
        fields = "__all__"
代码语言:javascript
复制
class SerialModel2(serializers.ModelSerializer):
    class Meta:
        model = Model2
        fields = "__all__"

因此,正如所示,即使模型具有相同的字段,我也需要对不同的模型序列化程序使用。

问题

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

EN

回答 1

Stack Overflow用户

发布于 2022-10-25 06:53:54

代码语言:javascript
复制
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.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74182401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档