方法一使用SerializerMethodField:
您可以在序列化程序中使用SerializerMethodField 将get_absolute_url() 值添加到对象的序列化表示中。
根据SerializerMethodField docs:
这是一个只读字段。它通过调用一个方法来获取它的值
它附加到的序列化程序类。 它可以用来添加任何
将数据排序到对象的序列化表示中。
我们将在序列化程序中为my_absolute_url 字段定义一个方法get_my_abslute_url(),它将对象的绝对url 添加到序列化表示中。
class MyModelSerializer(serializers.ModelSerializer):
my_absolute_url = serializers.SerializerMethodField() # define a SerializerMethodField
def get_my_absolute_url(self, obj):
return obj.get_absolute_url() # return the absolute url of the object
方法 2 使用 URLField 和 source 参数:
您也可以使用URLField 并将方法get_absolute_url 传递给它。这将调用方法get_absolute_url 并在序列化表示中返回该值。
来自source argument:上的 DRF 文档
将用于填充该字段的属性的名称。 五月
是一个只接受self argument 的方法,例如
URLField('get_absolute_url'),也可以用点符号遍历
属性,例如EmailField(source='user.email')。
class MyModelSerializer(serializers.ModelSerializer):
my_absolute_url = serializers.URLField(source='get_absolute_url', read_only=True)
我建议使用第二种方法,因为 DRF 在其文档中明确使用了此方法。