将附加数据添加到 django rest 框架视图集响应
Adding additional data to django rest framework viewset response
目前我有一个示例仓库的视图集,我想将额外的 'filter' 列表传递给每个返回的字典。
我的 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 对象返回的附加列表的想法都会受到赞赏。
我有点不清楚你想要什么,但如果你只想向输出添加一些只读计算字段,你可以使用 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。
- 您可以 return 任何由常规类型(数字、字符串、字典、列表、元组、布尔值、None)组成的东西。
- 如果数据必须来自外部,您应该让调用者将其添加到上下文中,并且它将在 self.context['foobar'].
目前我有一个示例仓库的视图集,我想将额外的 'filter' 列表传递给每个返回的字典。
我的 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 对象返回的附加列表的想法都会受到赞赏。
我有点不清楚你想要什么,但如果你只想向输出添加一些只读计算字段,你可以使用 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。
- 您可以 return 任何由常规类型(数字、字符串、字典、列表、元组、布尔值、None)组成的东西。
- 如果数据必须来自外部,您应该让调用者将其添加到上下文中,并且它将在 self.context['foobar'].