【问题标题】:Djangorestframework Modelresource add a field from an foreignkeyDjangorestframework Modelresource 从外键添加字段
【发布时间】:2012-11-08 14:09:01
【问题描述】:

我在 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)

【问题讨论】:

    标签: django django-rest-framework


    【解决方案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']
    

    【讨论】:

      【解决方案2】:

      我真的无法再支持 REST framework 0.x,但如果您决定升级到 2.0,这很简单 - 只需像这样在序列化器上声明该字段:foreignobject = PrimaryKeyRelatedField()

      【讨论】:

      • 感谢您的建议,我会牢记这一点,目前无法选择更新。
      • 正如您在另一个问题中看到的那样,您回答了...正在迁移。在通往最新版本的 REST 框架的道路上完成了非常好的工作!
      猜你喜欢
      • 2019-08-10
      • 2011-09-23
      • 1970-01-01
      • 1970-01-01
      • 2016-01-05
      • 1970-01-01
      • 2011-08-08
      • 2023-03-28
      • 2013-09-08
      相关资源
      最近更新 更多