__init __()得到了一个意外的关键字参数'last_name'

问题描述:

我有一个表单保存的问题。我有一个名为UserProfile模型,就像这样:__init __()得到了一个意外的关键字参数'last_name'

class UserProfile(models.Model): 
    first_name = models.CharField(max_length=50) 
    last_name = models.CharField(max_length=75) 
    email = models.EmailField(max_length=50, unique=True) 
    password = models.CharField(max_length=16) 
    age = models.IntegerField() 
    ... 

和形式创建模型的实例,就像这样:

class UserProfileForm(forms.Form): 
    first_name = forms.CharField(label='Introduzca su nombre', max_length=50) 
    last_name = forms.CharField(label='Introduzca sus apellidos', max_length=75) 
    email = forms.EmailField(label='Introduzca su email', max_length=50) 
    birth_date = forms.DateField(label='Introduzca su fecha de nacimiento', widget=forms.DateTimeInput(format='%d/%m/%Y')) 
    password = forms.CharField(label='Introduzca su contrasena', max_length=16, widget=forms.PasswordInput()) 
    password_repeat = forms.CharField(label='Por favor, repita su contrasena', max_length=16, widget=forms.PasswordInput()) 
    ... 
    def save(self): 
     age = (date.today()-self.cleaned_data['birth_date']).days/365 
     user = UserProfile(first_name=self.cleaned_data['first_name'], 
         last_name=self.cleaned_data['last_name'], 
         email=self.cleaned_data['email'], 
         password=self.cleaned_data['password'], 
         age=age) # The error is detected in this line 
     user.save() 
     return user 

它引发以下错误行:

__init__() got an unexpected keyword argument 'last_name' 

我不知道有什么问题,谁能帮助我?

+1

这是Django?你确定'UserProfile'类与你所显示的一样吗? – warvariuc

+0

您在UserProfile中的构造函数只接受一个参数(model,Model)不是5!这就是为什么解释者尖叫'last_name'的原因。更改您在UserProfile中传递的参数或创建模型,并添加像“first_name”,“last_name”这样的东西来建模对象,并将此对象传递给构造函数。 – pkruk

+0

@pkruk你从哪里得到这个信息? “[*关键字参数只是您在模型中定义的字段的名称。*](https://docs.djangoproject.com/en/1.8/ref/models/instances/#django.db.models 。模型)”。该错误似乎没有在代码中显示。 – dhke

class UserProfile(models.Model): 
    first_name = models.CharField(max_length=50) 
    last_name = models.CharField(max_length=75) 
    email = models.EmailField(max_length=50, unique=True) 
    password = models.CharField(max_length=16) 
    age = models.IntegerField() 
    ... 

我想你在这里有__init__方法,你没有显示。如果您使用的是它应该是这样的:

def __init__(self, *args, **kwargs): 
     ... # your code here 
     super(UserProfile, self).__init__(*args, **kwargs) 
     ... # and/or here 

换句话说,你已经在方式,它的签名不匹配母公司实现的签名覆盖__init__

+0

谢谢warvariuc;)我解决了它,我从我的所有模型中删除了所有的__init__方法,它的工作原理 –