向django rest框架视图集响应添加其他数据

时间:2015-03-02 11:30:08

标签: python json django django-rest-framework

我有一个示例Warehouse的视图集,我想将额外的'过滤器'列表传递给返回的每个字典。

我的WarehouseViewSet:

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对象返回的其他列表的想法都会得到应用。

1 个答案:

答案 0 :(得分:2)

我觉得有点不清楚你想要什么,但是如果你只是想在输出中添加一些只读的计算字段,你可以使用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'] 上使用。