首页 > 解决方案 > Django REST 序列化程序,如何添加额外的字段并设置它

问题描述

我需要你的帮助,扩展课程超出了我目前的 Python 技能。

Django 3.1 和 Django-Rest-Framework。

我想将“detail_url”字段添加到 VideoSerializer,并根据模型上的现有字段设置其值。“detail_url”未在模型中定义,我想在调用视图时动态生成它。我认为,序列化程序是最好的地方。

谢谢

序列化程序.py

from rest_framework import serializers
from django.urls import reverse
from main.models import Video


class VideoSerializer(serializers.ModelSerializer):
    detail_url = serializers.URLField()

    class Meta:
        model = Video
        fields = ['uuid', 'url', 'title', 'thumbnail_url', 'detail_url']
        # fields = '__all__'
    
    detail_url = reverse('video_detail', args=[model.uuid]) # <- this is the part I dont know where to declare

视图.py

def dashboard(request):
    context = {}
    if request.method == 'GET':
        user = request.user
       
        # retrieve user's videos
        videos = Video.objects.filter(user=user)
        if videos.exists():
            serializer = VideoSerializer(videos, many=True)
            context['videos'] = json.dumps(serializer.data)

        return render(request, 'main/dashboard.html', context)

标签: pythondjangoserializationdjango-rest-framework

解决方案


serializermethodfield当你想添加一个作为方法结果的字段时,你应该使用

class VideoSerializer(serializers.ModelSerializer):

    ...

    detail_url = serializers.SerializerMethodField()

    def get_detail_url(self, obj):
        return reverse('video_detail', obj.uuid)

推荐阅读