【问题标题】:Django Rest - Custom JSON based on applied logicDjango Rest - 基于应用逻辑的自定义 JSON
【发布时间】:2018-06-04 10:32:12
【问题描述】:

我正在尝试在 Django REST 框架中创建自定义 JSON。 (使用的方法是serializers.ModelSerializer)。我不确定采取什么方法来实现这一目标。

逻辑:检查模型中的某些数据,并根据该数据对另一个模型进行进一步的计算。这将一直持续到获得所需的输出。如何设置我的序列化程序和视图集。

class DataPointSerializer(serializers.ModelSerializer): 
    class Meta:
        model = DataPoint
        fileds = (what goes here ?)

    def to_representation(self,instance):
        model_one = model_one.objects.all()
        calculation using model_one
        model_two.objects.filter(by calculated data)
        construct JSON
        return  JSON

我想知道完成这项任务的方法。

TK-01

   `def get_representation(self,instance): 
    data = []
    Shifts = Shift.objects.all()
    for shift in Shifts:
        data.append(shift.shift_name)
    return data`

TK-02

我正在尝试创建类似 Link 的东西,但我在序列化程序中需要它而不是 APIView

【问题讨论】:

  • 你必须使用ModelSerializer吗?鉴于 JSON 输出将是自定义的,并且与 DataPoint 的字段没有密切关系,是否直接扩展 BaseSerializer 会更好?
  • 请检查我的问题中的 TK-02

标签: python django django-models django-rest-framework


【解决方案1】:

序列化器如下:

class DataPointSerializer(serializers.ModelSerializer):
    representation = serializers.SerializerMethodField()

    class Meta:
        model = DataPoint
        fileds = ('representation',)

    def get_representation(self,instance):
        data = []
        model_one = model_one.objects.all()
        calculation using model_one
        model_two.objects.filter(by calculated data)
        construct JSON
        data.append(construct JSON)
        return data

【讨论】:

  • 天哪,我知道自定义函数,但我完全忘记了。好吧,我尝试在 get_representaiton 处直接返回 Model.objects.all()。它说不能是 JSON 可序列化的。
  • 毛利克·帕特尔:我试过了。 shift 模型有 id 和 shift_name。只有三个条目。但是这个 get_representation 从附加到 Meta Class 的 Serializer 的模型中返回许多记录。每条记录在输出中包含来自 Shift 模型的 3 个条目,乘以附加模型的记录。在代码问题中查找 TK01。当我返回 Shift 数据时,它应该只在输出中出现一次。
猜你喜欢
  • 2021-05-15
  • 1970-01-01
  • 2019-05-30
  • 2021-01-30
  • 2013-08-12
  • 1970-01-01
  • 1970-01-01
  • 2017-10-16
  • 1970-01-01
相关资源
最近更新 更多