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

Django如何从关联字段模型获取用户id,解决Field 'id' expected a number报错

错误根源

你的代码中存在一处赋值逻辑错误:vendordetailform是绑定VendorDetails模型的表单,调用save()方法返回的是VendorDetails模型实例,你错误地将这个返回值赋值给了request.user,直接覆盖了原本属于CustomUser实例的当前登录用户对象。后续执行CustomUser.objects.filter(id=request.user)时,id字段要求传入数值类型参数,但你传入了VendorDetails实例,因此触发报错。

修正后的视图代码
@login_required
def become_vendor(request):
    vendordetailform = VendorAdminDetailsForm()
    if request.method == 'POST':
        vendordetailform = VendorAdminDetailsForm(request.POST, request.FILES)
        
        if vendordetailform.is_valid():    
            vendordetailform.instance.vendoruser = request.user      
            # 保存供应商详情,单独接收返回值,不要覆盖request.user
            vendordetailform.save()
            # 直接修改原request.user(当前登录用户)的激活状态
            request.user.is_active = False
            request.user.save()
            # 无需额外查询CustomUser,直接用request.user即可,反向关联数据直接调用
            return render(request,'vendor/preview.html', {
                'user_details': request.user, 
                'vendor_details': request.user.vendor_details.all()
            })
    else:
        vendordetailform = VendorAdminDetailsForm()

    return render(request, 'vendor/become_vendor.html', {'vendordetailform':vendordetailform})
逻辑优化说明
  • 无需额外发起CustomUser的查询请求,request.user本身就是当前登录的CustomUser实例,可直接使用,减少多余的数据库查询
  • 关联的供应商详情可直接通过反向关联别名vendor_details从用户实例获取,无需先查用户再取关联数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:54:03