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

Django中如何将函数返回值转为INT?TypeError报错求助

解决TypeError:int()参数不能是function对象的问题

核心问题很明确:你没有调用函数,只是把函数本身赋值给了变量,导致数据库字段收到的是函数对象而非整数类型的用户ID。咱们一步步修正:

1. 先修正get_userid函数的逻辑错误

你当前的get_userid里直接用User.is_authenticated是错误的,应该通过request.user判断当前请求的用户状态,而且Django 2.1里is_authenticated是只读属性(不需要加括号):

from django.contrib.auth.models import User

def get_userid(request):
    # 判断当前请求的用户是否已认证
    if request.user.is_authenticated:
        # request.user.id本身就是int类型,直接返回即可
        return request.user.id
    # 未认证时返回默认ID 14
    else:
        return 14

2. 修正to_DB函数的调用错误

你写的UID = get_userid只是把函数本身赋值给了UID变量,而非调用函数获取返回值。需要加括号调用函数,并且传入request参数(get_userid依赖request判断用户状态):

def to_DB(request, item, dic):  # 新增request参数传递
    # 调用函数并传参,获取int类型的用户ID
    UID = get_userid(request)
    date_started = timezone.now()
    item_searched = item
    # 此时UID是整数,可正常传入id_user字段
    Q = OPQuery(date_started=date_started, item_searched=item_searched, id_user=UID)
    Q.save()
    QID = Q.id
    QUID = OPQuery.objects.get(id=QID)

额外补充说明

  • 当你写UID = get_userid时,变量存储的是函数对象,所以type(UID)会显示<class 'function'>——这就是报错的根源:数据库id_user字段需要整数,但你传了一个函数过去。
  • 调用函数必须加括号,并且传入所需参数(这里get_userid必须要request才能工作)。
  • request.user.id本身就是int类型,完全不需要额外转换。

这样修改后,UID就会是合法的整数类型,能正常存入数据库了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:53:50