You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中Websocket结合HyperLinkedModelSerializer报错求助

问题解决:HyperlinkedIdentityField 需要 request 上下文的问题

为什么需要 request?

HyperlinkedModelSerializer 会为模型生成超链接类型的字段(比如默认的url字段),这类超链接需要基于当前请求的协议、域名等信息来构建完整的可访问URL,因此必须把request对象传入序列化器的上下文(context)中,否则无法生成合法的超链接地址。

解决方法

你不需要手动实例化序列化器(GenericAsyncAPIConsumer 会自动完成序列化器的实例化流程),只需要在消费者类中重写get_serializer_context方法,将request添加到上下文里即可:

修改后的消费者代码:

class Instructors_Consumer(
        ListModelMixin,
        RetrieveModelMixin,
        PatchModelMixin,
        UpdateModelMixin,
        CreateModelMixin,
        DeleteModelMixin,
        GenericAsyncAPIConsumer):
    queryset=Instructor.objects.all()
    serializer_class=InstructorSerializer

    def get_serializer_context(self):
        context = super().get_serializer_context()
        # 将当前请求对象注入序列化器上下文
        context['request'] = self.scope['request']
        return context

替代方案

如果你的业务场景不需要超链接字段,也可以直接将序列化器改为ModelSerializer,这样就不需要传入request上下文了:

class InstructorSerializer(serializers.ModelSerializer):
    class Meta:
        model=Instructor
        fields='__all__'

内容的提问来源于stack exchange,提问作者Owlet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 11:55:22