有关使用
to_representation
的文档有点短。 Django Rest Framework 3.0+
使用此方法来更改 API 中数据的表示形式。
这里是文档链接:
这是我当前的代码:
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
?
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
参数...
def to_representation(self, instance):
data = super(ResultLogSerializer, self).to_representation(instance)
data['username'] = instance.job_result.user.username
data['status'] = instance.job_result.status
data['created'] = instance.job_result.created
data['completed'] = instance.job_result.completed
return data
def to_representation(self, 实例): self.fields['国家'] = CountrySerializer(read_only=True) self.fields['state'] = StateSerializer(read_only=True)
def to_representation(self, instance):
self.fields['country'] = CountrySerializer(read_only=True)
self.fields['state'] = StateSerializer(read_only=True)
self.fields['city'] = CitySerializer(read_only=True)
return super(AreaSerializer, self).to_representation(instance)
self.fields['city'] = CitySerializer(read_only=True) 返回 super(AreaSerializer, self).to_representation(instance)