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

DRF中允许AnonymousUser作为Book所有者结合HyperlinkedModelSerializer报错修复请求

问题修复:未认证用户创建Book时的ValueError错误

问题根源

未认证用户发起请求时,self.request.user是AnonymousUser实例,而Book.owner字段要求的是CustomUser实例(或null),直接赋值会触发类型不匹配的报错——这个问题和HyperlinkedModelSerializer无关,是赋值逻辑的疏漏。

修复方案

修改perform_create方法,判断用户是否已认证:已认证用户则传入当前用户,未认证用户则传入None,匹配模型中owner字段null=True的配置。

修改后的views.py代码:

class BookViewSet(viewsets.ModelViewSet):
    serializer_class = BookSerializer
    queryset = Book.objects.all()

    def perform_create(self, serializer):
        owner = self.request.user if self.request.user.is_authenticated else None
        serializer.save(owner=owner)

额外说明

你的序列化器设置是正确的:owner在read_only_fields中,前端无法传入该字段,完全由后端通过perform_create控制赋值;owner_username作为只读字段,当owner为None时会返回空值,符合业务预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 03:51:36