【问题标题】:Adding an action field to a post using Django Rest Framework使用 Django Rest Framework 向帖子添加操作字段
【发布时间】:2015-12-08 12:58:25
【问题描述】:

我需要使用 Django Rest Framework 将一些 JSON 添加到我的序列化模型中。它的目的只是与我正在采取什么行动的api进行交流。 json 需要为action:"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')

【问题讨论】:

    标签: python json django django-rest-framework


    【解决方案1】:

    您需要添加一个SerializerMethodField() 以始终将一个值为createprojectaction 键添加到您的对象的序列化表示中。

    来自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
    

    【讨论】:

    • 这成功了。非常感谢您的帮助。我曾尝试过类似的方法,但效果不佳。看来我没有正确使用方法字段。
    【解决方案2】:

    答案是使用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"} 作为您的数据的一部分。如果您试图在回复中这样做,那么您需要自定义您的视图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-26
      • 1970-01-01
      • 2015-08-13
      • 1970-01-01
      • 2021-08-07
      • 2019-01-31
      相关资源
      最近更新 更多