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

