【问题标题】:Adding additional data to django rest framework viewset response将附加数据添加到 django rest 框架视图集响应
【发布时间】:2015-05-02 17:48:05
【问题描述】:

目前我有一个示例仓库的视图集,我想将额外的“过滤器”列表传递给返回的每个字典。

我的仓库视图集:

class WarehouseViewSet(viewsets.ReadOnlyModelViewSet):
    filters = [{'date': 'Date/Time'}]

    queryset = Warehouse.objects.all()
    serializer_class = WarehouseSerializer

WarehouseSerializer:

class WarehouseSerializer(serializers.ModelSerializer):

    class Meta:
        model = Warehouse
        field = ('name', 'address', 'action_list')

目前我得到一个 json 列表响应,如:

[
    {
        "id": 1, 
        "name": "Brameda Warehouse", 
        "address": "Bergijk"
    }, 
    {
        "id": 2, 
        "name": "Amazon", 
        "address": "UK"
    }
]

我想得到:

[
    {
        "id": 1, 
        "name": "Brameda Warehouse", 
        "address": "Bergijk"
        "filters": [
                    {'date': 'dateTime'}, {'actove': 'ActiveObject'}
                   ]
    }, 
    {
        "id": 2, 
        "name": "Amazon", 
        "address": "UK",
        "filters": [
                    {'date': 'dateTime'}, {'actove': 'ActiveObject'}
                   ]
    }
]

我知道在对象字典之外有一个过滤器就足够了,但我想知道如何在对象内部传递列表。

任何想法如何传递将作为 json 对象返回的附加列表都会被重视。

【问题讨论】:

    标签: python json django django-rest-framework


    【解决方案1】:

    我觉得你想要什么有点不清楚,但如果你只是想在输出中添加一些只读计算字段,你可以使用 SerializerMethodField:

    class WarehouseSerializer(serializers.ModelSerializer):
        # your other declared fields here
        filters = serializers.SerializerMethodField()
    
        # your Meta options here
    
        def get_filters(self, obj):
            return ['some', 'stuff', 'here', {'and': 'more'}]
    
    • 该方法必须命名为 get_field_name(有一个选项可以更改它,但我真的看不出使用它有什么意义)。
    • 您将实例序列化为 obj
    • 您可以返回由常规类型(数字、字符串、字典、列表、元组、布尔值、无)组成的任何内容。
    • 如果数据必须来自外部,您应该让调用者将其添加到上下文中,并且它将在 self.context['foobar'] 上可用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-26
      • 1970-01-01
      • 2015-08-26
      • 2019-06-26
      • 2021-11-02
      • 2020-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多