您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何使用Django-rest-framework在序列化器级别扩展模型

如何使用Django-rest-framework在序列化器级别扩展模型

首先,创建一个视图,该视图将返回您感兴趣的MenuItemComponent实例。

class ListComponents(generics.ListAPIView):
    serializer_class = MenuItemComponentSerializer

    def get_queryset(self):
        """
        Override .get_queryset() to filter the items returned by the list.
        """
        menuitem = self.kwargs['menuitem']
        return MenuItemComponent.objects.filter(menuItem=menuitem)

然后,您需要创建一个序列化器以提供所需的表示形式。您的示例比典型案例更有趣/更有趣,因此看起来像这样…

class MenuItemComponentSerializer(serializers.Serializer):
    url = ComponentURLField(source='component')
    name = Field(source='component.name')
    isReplaceable = Field()

字段“名称”和“ isReplaceable”可以仅使用认的只读Field类。

这里没有一个字段完全符合您的“ url”情况,因此我们将为此创建一个自定义字段

class ComponentURLField(serializers.Field):
    def to_native(self, obj):
        """
        Return a URL, given a component instance, 'obj'.
        """

        # Something like this...
        request = self.context['request']
        return reverse('component-detail', kwargs=kwargs, request=request)

我认为那应该是正确的。

这是用于只读序列化的- 如果您想要可写序列化,则需要研究重写restore_object序列化器上的方法,并使用WritableField或类似的方法

Go 2022/1/1 18:37:33 有376人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶