django - 如何在 django Rest Framework 中从 view.py 提供 SerializerMethodField 输入
问题描述
我正在使用 Django DRF,并且难以应用 SerializerMethodField ( https://www.django-rest-framework.org/api-guide/fields/#serializermethodfield )
以下是典型模型的简单案例,序列化程序代码,它可以完美运行。
serializer.py(之前)
from django.contrib.auth.models import User
from rest_framework import serializers
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = '__all__'
view.py(之前)
@api_view(['GET'])
def GetAllUsers(request):
Users = User.objects.all()
serializer = UserSerializer(Users, many=True)
return Response(serializer.data)
为了提供模型中未包含的附加信息,我更改了序列化程序
serializer.py(之后)
from django.contrib.auth.models import User
from django.utils.timezone import now
from rest_framework import serializers
class UserSerializer(serializers.ModelSerializer):
days_since_joined = serializers.SerializerMethodField()
class Meta:
model = User
def get_days_since_joined(self, obj):
return (now() - obj.date_joined).days
现在我必须找到一种方法将 obj(其中有 date_joined 内部)提供给序列化程序,我想我必须在 view.py 中做到这一点
但我不知道该怎么做。
谢谢
解决方案
您可以像这样将额外的上下文传递给序列化程序
视图.py
@api_view(['GET'])
def GetAllUsers(request):
Users = User.objects.all()
context = {"extra_obj": extra_obj}
serializer = UserSerializer(Users, many=True, context=context)
return Response(serializer.data)
序列化程序.py
from django.contrib.auth.models import User
from django.utils.timezone import now
from rest_framework import serializers
class UserSerializer(serializers.ModelSerializer):
days_since_joined = serializers.SerializerMethodField()
class Meta:
model = User
def get_days_since_joined(self, obj):
extra_obj = self.context.get("extra_obj")
return (now() - extra_obj.date_joined).days
参考这里的官方文档
推荐阅读
- scala - Spark-Scala 关于使用 Case Class Demiliter 的问题
- python - 获取数据框中字典的长度
- typescript - 将泛型类型参数传递给 Knexjs 插入
- python - 使用熊猫从系列中提取多个日期
- python - 从机器人框架中的属性文件中读取基于部分的值
- javascript - Select2 下拉菜单的大小正在缩小
- python - Django 模型:如何仅从另一个模型访问与特定用户相关的字段
- javascript - JavaScript - 遍历图像并在最后一个图像处停止执行
- laravel - Telegram bot webhook 将用户标识符 id 返回为 null
- javascript - 如何使用图表 js npm 模块通过节点使用 html/ejs 生成图表?