TypeError save() 至少需要 2 个非关键字参数(给定 1 个)
Posted
技术标签:
【中文标题】TypeError save() 至少需要 2 个非关键字参数(给定 1 个)【英文标题】:TypeError save() takes at least 2 non-keyword arguments (1 given) 【发布时间】:2010-11-27 23:34:08 【问题描述】:我有意见.py
def status_set(request):
ip_address= request.META['REMOTE_ADDR']
if request.method == "POST":
rform = registerForm(data = request.POST)
if rform.is_valid():
register = rform.save(commit=False)
register.user=request.user
register.save()
return render_to_response('home.html')
else:
rform = registerForm()
return render_to_response('status_set.html','rform':rform)
在forms.py中我有
from django.contrib.gis.utils import GeoIP
class registerForm(forms.ModelForm):
class Meta:
model=register
fields = ('Availability', 'Status')
def save(self,ip_address, *args, **kwargs):
g = GeoIP()
lat, lon = g.lat_lon('ip_address')
user_location = super(registerForm, self).save(commit=False)
user_location.latitude = lat
user_location.longitude = lon
user_location.save(*args, **kwargs)
当我尝试提交表单时,它说
/status-set/ 处的类型错误 save() 至少需要 2 个非关键字参数(给定 1 个) 我无法找到解决方案。这可能是什么原因 我想我必须将 IP 地址作为参数传递任何建议
【问题讨论】:
【参考方案1】:ip_address 参数是必需的,因此您必须提供它:
register.save(ip_address)
此外,您实际上并没有在方法中使用 ip_address 参数。在您调用的方法中,您可能不应该在ip_address
周围加上引号:
lat, lon = g.lat_lon(ip_address)
【讨论】:
马克的答案是正确的......在您的原始代码中 1)您没有将ip_address
从视图传递到表单的保存方法,2)即使您这样做了,调用 g.lat_lon('ip_address')
(注意单引号)意味着您将字符串传递给 g.lat_lon(),而不是 ip_address 参数。以上是关于TypeError save() 至少需要 2 个非关键字参数(给定 1 个)的主要内容,如果未能解决你的问题,请参考以下文章
TypeError: save() missing 1 required positional argument: 'self'
/reg/ save() 处的 TypeError 有一个意外的关键字参数“force_insert”
在 Django 模型中使用 save() 会产生 TypeError
NodeJS Mongoose record.save TypeError
TypeError:在使用 Jests 和 Mongoose 测试 NestJS API 时,updatedService.save 不是一个函数
$save 给了我 TypeError: undefined is not a function when save model that is a list in angular