关于使用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
?
2条答案
按热度按时间a0zr77ik1#
DRF的
ModelSerializer
已经有了处理这个问题的所有逻辑。在您的情况下,您甚至不需要定制to_representation
。如果您需要定制它,我建议您首先调用super,然后定制输出:另外,如果你想知道它是如何工作的,那么神奇的事情实际上并没有发生在
ModelSerializer.to_representation
中。事实上,它甚至没有实现那个方法。它是在常规的Serializer
上实现的。Django模型的所有神奇之处实际上都发生在get_fields
中,get_fields
调用get_field_names
,然后get_field_names
考虑Meta.fields
参数。7cwmlq892#