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

在Django REST Framework中创建Organization时如何更新请求用户的organization字段?

解决Django中更新User模型实例字段的错误:'User' object has no attribute 'update'

你遇到的问题很典型——update()是Django **QuerySet(查询集)**的方法,而self.request.user是单个的User模型实例,所以直接调用update()会报错。下面给你两种正确的解决方式:


方法一:直接赋值模型字段并保存(推荐)

这种方式最直观,而且利用serializer.save()返回的已创建Organization实例,不用额外查询数据库:

class OrganizationViewSet(viewsets.ModelViewSet):
    queryset = Organization.objects.all()
    serializer_class = OrganizationSerializer
    permission_classes = [permissions.IsAuthenticated]

    def perform_create(self, serializer):
        # 保存并获取创建好的Organization实例
        created_org = serializer.save(admin_user=self.request.user)
        # 给当前用户的organization字段赋值
        self.request.user.organization = created_org
        # 保存用户实例的修改
        self.request.user.save()

方法二:使用QuerySet的update方法

如果你更倾向于用QuerySet的方式更新(适合批量操作,单个实例也能用),可以通过过滤出当前用户的QuerySet来调用update():

def perform_create(self, serializer):
    created_org = serializer.save(admin_user=self.request.user)
    # 通过用户ID过滤出QuerySet,再调用update
    User.objects.filter(pk=self.request.user.pk).update(organization=created_org)

为什么原来的代码报错?

  • self.request.user是单个模型实例,Django的模型实例没有update()方法,这个方法只存在于QuerySet对象上。
  • 另外,你原来通过data['id']获取组织ID再赋值的方式可以优化:serializer.save()直接返回创建好的Organization实例,用它直接赋值比取ID更安全(避免序列化器没返回id的情况),也更高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 15:23:11