我做了一个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, null=True, blank=True, 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。
答案 0 :(得分:1)
我需要在资源中添加我要显示的资源....
fields =('name',(“parent”,“MyObjectResource”),'以及您想要查看的所有其他字段......')
我在这里找到了它:google groups forum question
您可以跳过排除,忽略它,只需添加要显示的字段,您不必定义它们,除非您需要指明要使用的资源。
以下是resource.py部分的最终代码:
class MyObjectResource(ModelResource):
model = MyObject
fields = ('name', ("parent","MyObjectResource"), 'and all the other fields you want to see as well...')
答案 1 :(得分:0)
以下是其他解决方案的实现方式。
class ProToPicturesSerial(serializers.ModelSerializer):
pro_pictures = PictureSerializer(many=True)
pro_videos = VideoSerializer(many=True)
city_pro = CitySerializer(many=True)
class Meta:
model = Province
fields = ('id', 'name', 'intro', 'description', 'display_url', 'pro_pictures', 'pro_videos', 'city_pro')