可以在Django Rest Framework中的to_representation()访​​问正常字段

时间:2015-08-04 22:22:32

标签: python django django-rest-framework

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

下面'文档链接:

How to find which elements are in the bag, using Knapsack Algorithm [and not only the bag's value]?

这是我目前的代码:

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中指定的字段。

是否可以在class Meta: fields方法中引用to_representation

1 个答案:

答案 0 :(得分:25)

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

P.S。如果你有兴趣知道它是如何工作的,那么魔法实际上不会发生在ModelSerializer.to_representation中。事实上,它甚至没有实现这种方法。它是在常规Serializer上实施的。 Django模型的所有魔法实际上都发生在get_fields,调用get_field_names然后考虑Meta.fields参数......