Djangorestframework Modelresource从外键添加一个字段

时间:2012-11-20 13:33:24

标签: django django-rest-framework

我在django-rest框架中有一个api,它现在返回这个json数据:

  [
    {
        "id": 1,
        "foreignobject": {
            "id": 3
        },
        "otherfields": "somevalue"
    }
]

但是我想让它返回这样的东西(将foreigneky扁平化为它的ID):

[
    {
        "id": 1,
        "foreignobject_id":3,
        "otherfields": "somevalue"
    }
]

在模型资源中执行此操作,现在我已经(简化):

class ForeignKeyInDataResource(ModelResource):
    model = TheOtherModel
    fields = ('id',)


class SomeModelResource(ModelResource):
    model = SomeModel
    fields = ( 'id',('foreignobject','ForeignKeyInDataResource'),'otherfields',)

我尝试过类似的事情:

class SomeModelResource(ModelResource):
    model = SomeModel
    fields = ( 'id','foreignobject__id','otherfields',)

但这不起作用

对于完整的故事,这个视图如何返回数据,列表是对SomeModel的查询结果:

data = Serializer(depth=2 ).serialize(list)
return Response(status.HTTP_200_OK, data)

2 个答案:

答案 0 :(得分:1)

我不再能够支持REST框架0.x了,但是如果您决定升级到2.0,这是微不足道的 - 只需在序列化器上声明字段就像这样:foreignobject = PrimaryKeyRelatedField() < / p>

答案 1 :(得分:1)

我找到了另一种选择:(通过阅读ModelResource文档......) 在Modelresource中,您可以定义一个函数(self,instance),它可以返回id。

在字段中可以添加此功能!

所以,这有效:

class SomeModelResource(ModelResource):
    model = SomeModel
    fields = ( 'id','foreignobject_id','otherfields',)

    def foreignobject_id(self, instance):
        return instance['foreignobject']['id']