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