Django:如何在序列化程序中的自定义方法中使用模型属性?

时间:2015-12-29 17:26:39

标签: django serialization django-rest-framework

from rest_framework import serializers


class UserProfileSerializer(serializers.ModelSerializer):
    """Serializes data for User."""
    url = serializers.URLField(source='profile_url')

    def profile_url(self):
        """Return user profile endpoint."""
        return reverse('user:profile_view', kwargs=self.context.get('id', None))

    class Meta:
        model = User
        fields = ('id', 'url')

如何在profile_url内访问User.id? id中似乎没有任何context参数,或者至少我认为我没有正确访问。

1 个答案:

答案 0 :(得分:2)

实际上,您可能希望将序列化程序中的字段更改为:

url = serializers.SerializerMethodField('profile_url')

这将为方法profile_url提供一个额外的参数,即被序列化的对象。所以在你的情况下,这变成了:

def profile_url(self, obj):
    """Return user profile endpoint."""
    return reverse('user:profile_view', args=[obj.id,])