如何在不在Django REST Framework中定义序列化程序的情况下获取嵌入资源?

时间:2016-03-04 05:00:08

标签: django rest django-rest-framework

据我所知,如果我想获得一个嵌入资源,需要在适当的序列化程序中定义它。然后无论我是否需要它都会被嵌入。 如果我想要两个不同的嵌入式推进器,我需要两个网址。

所以我想知道我是否可以实现像Eve这样的?embedded=请求: GET (/emails/<id>/?embedded={"author":1},默认情况下,嵌入资源是READ ONLY。

1 个答案:

答案 0 :(得分:1)

假设您希望将不同的对象作为嵌入对象,您可以使用以下内容实现此类思考:

您可以将kwargs传递给序列化程序context

serializer = YourSerializer(data=initial_first_shop_data,
                            context={"author": 1})

然后覆盖.to_representation()方法

def to_representation(self, instance):
    representation = super(DynamicFieldsModelSerializer, self).to_representation(instance)

    if 'author' in self.context:
        author = AuthorSerializer(Author.objects.get(pk=self.context['author']))
        representation['author'] = author.data

    return representation

如果您始终将author作为嵌入对象,则将其添加到序列化程序会更简单,如果它不在context中,请将其保留。