关于使用to_representation的文档有点短.Django Rest Framework 3.0+使用此方法更改API中数据的表示形式.

以下是文档链接:

http://www.django-rest-framework.org/api-guide/serializers/#overriding-serialization-and-deserialization-behavior

以下是我当前的代码:

from django.forms.models import model_to_dict

class PersonListSerializer(serializers.ModelSerializer):

    class Meta:
        model = Person
        fields = ('foo', 'bar',)

    def to_representation(self, instance):
        return model_to_dict(instance)

当我编写这段代码时,它会返回模型中的所有字段,而不是我在上面的class Meta: fields中指定的字段.

可以在to_representation方法中引用class Meta: fields吗?

推荐答案

DRF的ModelSerializer已经具备了处理这个问题的所有逻辑.在你的情况下,你甚至不需要定制to_representation.如果需要自定义,我建议您先调用super,然后自定义输出:

class PersonListSerializer(serializers.ModelSerializer):
    class Meta:
        model = Person
        fields = ('foo', 'bar',)

    def to_representation(self, instance):
        data = super(PersonListSerializer, self).to_representation(instance)
        data.update(...)
        return data

另外,如果你有兴趣知道它是如何工作的,这种神奇的事情实际上不会发生在ModelSerializer.to_representation年.事实上,它甚至没有实现这种方法.它在常规的Serializer天内实施.Django模型的所有魔力实际上发生在get_fields中,它调用get_field_names,然后考虑Meta.fields个参数...

Django相关问答推荐

django命令中的no_color不起作用

Django-无法显示基于字段值的元素

如何从Django';S模型中的方法中检索值?

try 在 django 中发送验证邮箱,出现错误

通过 OrderingFilter 过滤平均和

使用自定义的AuthBackend时,无法使用request.user.is_authenticated或@login_required修饰符

源自访问外键关系的模型方法 get_absolute_url 的 django 重复 SQL 查询

无法迁移,模型中的外键导致了问题

Django AWS S3对象存储boto3媒体上传报错

Django Inline Tabular admin:删除一个不工作的对象

有什么方法可以自动设置 Debug True Django application

Django 模型中的隐藏字段

Django PositiveIntegerField 中的 0 值?

如何在 Django ORM 中执行 GROUP BY ... COUNT 或 SUM?

Django 模板上的 URL 编码

Django 基于角色的视图?

django - 如何使翻译工作?

在 Django 中注册用户的最佳方法

django:manytomanyfield 和 through 如何出现在 admin 中?

get_or_create() 是否必须立即保存?