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),但是我想要排除在返回的对象中排除的相同字段.
有没有一个很好的方法来做到这一点(我已经尝试了几个没有想要的结果). 这是我的(简化)代码: 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. 解决方法
啊,我刚刚发现它:
我需要为我要显示的资源添加所有字段的资源….
我在这里找到了它: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...') (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |