加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

Django Rest框架序列化器排除深度为2的外键

发布时间:2020-12-20 13:29:59 所属栏目:Python 来源:网络整理
导读:我做了一个api,它返回一个对象作为json数据.我正在使用 django-rest-framework及其序列化程序.使用资源(ModelResource)我排除了一些字段,比如名为“owner”的属性.其中一个领域是itselve的外键.我想在api中显示这个字段(所以我使用depth = 2),但是我想要排除
我做了一个api,它返回一个对象作为json数据.我正在使用 django-rest-framework及其序列化程序.使用资源(ModelResource)我排除了一些字段,比如名为“owner”的属性.其中一个领域是itselve的外键.我想在api中显示这个字段(所以我使用depth = 2),但是我想要排除在返回的对象中排除的相同字段.
有没有一个很好的方法来做到这一点(我已经尝试了几个没有想要的结果).

这是我的(简化)代码:
在models.py中:

class MyObject(models.Model):
    name = models.CharField(max_length=256,blank=True)
    parent = models.ForeignKey('self',blank=True,null=True,default=None)
    and_some_otherfields = models.otherFields(....)
    owner = models.ForeignKey(User,related_name='myobject_owner')

在resource.py中:

class MyObjectResource(ModelResource):
    model = MyObject
    exclude = ('owner','and some other fields',)

在用于返回对象的视图中,它返回:

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

在响应中,它省略了排除字段(正如我想要的那样).

但在字段parent中,父myobject包含我要隐藏的所有字段.

我正在寻找一种方法来表明对于这个父对象,序列化器应该使用相同的资源,或者将secundary字段添加到排除列表….

如果我使用depth = 1,它只显示它是否有父([]),如果没有,则显示null,并且我至少需要知道父ID.

解决方法

啊,我刚刚发现它:

我需要为我要显示的资源添加所有字段的资源….

fields = (‘name’,(“parent”,”MyObjectResource”),‘and all the other fields you want to see as well…’)

我在这里找到了它:google groups forum question

您可以跳过exlude,忽略它,只需添加要显示的字段,您不必定义它们,除非您需要指明要使用的资源.

以下是resource.py部分的最终代码:

class MyObjectResource(ModelResource):
    model = MyObject
    fields = ('name',("parent","MyObjectResource"),'and all the other fields you want to see as well...')

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读