django - 自动将所有模型字段添加到 django rest 序列化程序

标签 django rest python-3.x django-rest-framework

当我定义 ModelSerializer 时,元类可用于定义要序列化的字段,它会自动继承模型中的所有字段:

class ClientSerializer(ModelSerializer):
    class Meta:
        model = Client

我必须构建一个嵌套的序列化程序(基于 SerializerMethodField)。所以我必须定义要包含的字段:

class ClientSerializer(ModelSerializer)
     address = SerializerMethodField('get_client_addresses')

     class Meta:
          model = Client
          fields = ('address','name','city', <etc*>)

     def get_client_addresses(self, obj):
          addresses = Addresses.objects.all().filter(parent=obj)
          serializer = AddressSerializer(addresses, many=True,
                                         context={'request', self.context.get('request') })
          return serializer.data

问题:在这种情况下,我必须手动将所有 客户端字段添加到字段元组中。我不想这样做,因为它看起来很重复并且对错误敏感。我如何向使用 ModelSerialzer 时包含的默认字段添加“加 1”字段(在本例中为地址)???

注意:这是一个简化的例子。我的模型有 40 多个字段,我必须对嵌套模型使用 SerializerMethodField,因为我必须将上下文数据(用户信息)传递到序列化程序以实现我已实现的字段级身份验证。

(更新,地址是一个SerializerMethodField,名字搞混了)

最佳答案

默认情况下,如果 Meta 中未定义 fields 参数,则 ModelSerializer 返回所有模型字段。
与普通的serializers.Serializer 类似,它将返回序列化器中定义的所有字段(只读 字段除外)。

仅当您希望返回所有字段的子集时,才必须在 Meta 类中指定 fields

(来自 DRF 文档)

If you only want a subset of the default fields to be used in a model serializer, you can do so using fields or exclude options.

所以不要在您的 Meta 类中指定 fields 参数,它应该返回所有字段。

关于django - 自动将所有模型字段添加到 django rest 序列化程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30727382/

相关文章:

python - Django - 限制 unique_together 列上的键大小

python - Django Rest-auth 身份验证仅适用于 super 用户。在其他情况下,我得到 - 无法使用提供的凭据登录

javascript - 如何使用 MS Dynamics CRM REST 端点更新或删除现有电话/电子邮件记录的发件人和收件人

python-3.x - 如何在 virtualenv 下在 Jetson nano 上导入 cv2?

python-2.7 - Python OOP 与实例变量的使用相关

python-3.x - 如何在两个日志之间添加新行或分隔符

Django:检查模板的连接是否安全?

python - 安全地允许 DRF 串行器字段中的 M2M 字段为空所需的最低选项是什么?

android - 使用旧学校服务进行改造

rest - 冷聚变 10 : Handling and Logging Errors With New REST API