Django插入操作报错:TypeError: int()参数类型错误咨询
解决Django插入操作中的TypeError: int() argument must be a string, bytes-like object or number, not 'DeferredAttribute'
嘿,这个错误我太熟悉了!基本上可以确定是你在创建模型实例的时候,错误地引用了模型类的字段(比如User.id),而不是当前用户实例的实际字段值(比如current_user.id)。
Django里,当你直接通过模型类访问字段(比如User.id)时,得到的不是具体的数值,而是一个叫DeferredAttribute的字段描述对象。当你把这个对象传给需要整数的字段(比如外键关联的user字段),Django尝试把它转成int的时候就会炸出这个错误。
结合你给出的视图代码片段,我猜你的代码大概是这样的(补全了你没写完的部分):
class BanqueViews(FormView): def get(self, request,*args,**kwargs): if request.user.is_active : current_user = request.user # 错误写法:用了User.id而不是current_user.id banque = Banque(user=User.id, some_field=...) banque.save()
给你两种修复方式,推荐第一种:
class BanqueViews(FormView): def get(self, request,*args,**kwargs): if request.user.is_active : current_user = request.user # 方式1:直接传用户实例,Django会自动处理外键关联 banque = Banque(user=current_user, some_field=...) # 方式2:如果必须传ID,就用实例的id属性 # banque = Banque(user_id=current_user.id, some_field=...) banque.save()
另外,如果是其他字段出现这个问题,你也照着这个思路排查:检查是不是把模型类的字段(比如Banque.amount)当成具体值传入了,而不是实际的变量或数值。
要是还解决不了,可以把完整的模型定义和保存实例的代码贴出来,我再帮你揪问题~
内容的提问来源于stack exchange,提问作者Elroum
相关产品推荐
相关产品推荐

