是否可以在Django REST序列化程序中添加计算出的超链接?

2024-09-30 04:36:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个表示内容抽象的序列化程序,我想在其中添加一个超链接字段,该字段不在模型中,而是由链接到ContentsSerializer的框架计算的

class ContentsAbstractSerializer(serializers.HyperlinkedModelSerializer):
    content_url = ???
    class Meta:
        model = Contents
        fields = ('content_url','content_id','content_title', 'content_abstract','start_date','stop_date','last_date','content_status','version')

class ContentsSerializer(serializers.HyperlinkedModelSerializer):
    categories = CategoriesContentsSerializer(read_only=True, many=True)
    class Meta:
        model = Contents
        fields = ('content_id','content_title', 'content_abstract', 'content_body','start_date','stop_date','last_date','content_status','version','sections', 'images','attaches','categories')

我希望得到这样的结果:

{
    "content_url":"http://mysite/Content/125",
    "content_id": 125,
    "content_title": "this is the title",
    "content_abstract": "This is the abstract",
    "start_date": "2005-01-12",
    "stop_date": "3000-01-12",
    "last_date": "2019-02-27T09:40:38Z",
    "content_status": "PUBLISHED",
    "version": 0
},

Tags: abstractidurldatetitleversionstatuscontent
1条回答
网友
1楼 · 发布于 2024-09-30 04:36:15

我认为不应该定义自己的自定义字段,而应该使用手动指定每个嵌套资源的视图名称作为extra_kwargs的一部分

我认为你可以做这样的事情:

class ContentsAbstractSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Contents
        fields = ('content_url','content_id','content_title', 'content_abstract','start_date','stop_date','last_date','content_status','version')
        extra_kwargs = {
            'content_url': {'view_name': 'name_of_your_detail_view'},
        }

输出

{
    "content_url":"http://mysite/Content/125",
    "content_id": 125,
    ....
},

The Resource: 'HyperlinkedModelSerializer' with custom nested 'view_name's does not work in combination with 'depth'

Oficial Resource: How hyperlinked views are determined

相关问题 更多 >

    热门问题