Python 使用Django Rest框架向帖子添加操作字段
我需要使用Django Rest框架向序列化模型添加一些JSON。它的目的只是向api传达我要执行的操作。json需要是Python 使用Django Rest框架向帖子添加操作字段,python,json,django,django-rest-framework,Python,Json,Django,Django Rest Framework,我需要使用Django Rest框架向序列化模型添加一些JSON。它的目的只是向api传达我要执行的操作。json需要是操作:“createproject” 下面是我的序列化程序的一个示例 from models import Project from rest_framework import serializers class ProjectSerializer(serializers.ModelSerializer): """ Serializes the Project
操作:“createproject”
下面是我的序列化程序的一个示例
from models import Project
from rest_framework import serializers
class ProjectSerializer(serializers.ModelSerializer):
"""
Serializes the Project model to send and receive valid JSON data.
"""
action = serializers.SOMETYPEOFFIELDIMGUESSING(data="createproject")
class Meta:
model = Project
fields = ('action', 'title', 'id', 'endDate', 'startDate', 'product')
答案是使用
CharField
,它将序列化和反序列化字符串
from models import Project
from rest_framework import serializers
class ProjectSerializer(serializers.ModelSerializer):
"""
Serializes the Project model to send and receive valid JSON data.
"""
action = serializers.CharField()
class Meta:
model = Project
fields = ('action', 'title', 'id', 'endDate', 'startDate', 'product')
然后在您的帖子中,您可以将{“action”:“createproject”}
作为数据的一部分发送。如果您试图在响应中这样做,那么您需要自定义视图 您需要添加一个,以便始终将值为createproject
的action
键添加到对象的序列化表示中
从SerializerMethodField()上的DRF文档中:
这是一个只读字段。它通过在上调用方法来获取其值
它附加到的序列化程序类可用于添加任何排序
将数据转换为对象的序列化表示形式
您的最终代码如下所示:
from models import Project
from rest_framework import serializers
class ProjectSerializer(serializers.ModelSerializer):
"""
Serializes the Project model to send and receive valid JSON data.
"""
# define a SerializerMethodField
action = serializers.SerializerMethodField(method_name="get_data_for_action")
class Meta:
model = Project
fields = ('action', 'title', 'id', 'endDate', 'startDate', 'product')
def get_data_for_action(self, obj):
return "createproject" # always add this value in the 'action' key of serialized object representation
这就成功了。非常感谢你的帮助。我也试过类似的方法,但效果不太好。看来我没有正确使用methodfield。