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
相关产品推荐
相关产品推荐

