Python 使用Django Rest框架向帖子添加操作字段

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

我需要使用Django Rest框架向序列化模型添加一些JSON。它的目的只是向api传达我要执行的操作。json需要是
操作:“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。