获取__init__()得到了一个意外的关键字参数“instance”,它带有Django的CreateView

时间:2021-07-24 06:21:25

Some details:

Request Method: GET
Request URL: http://localhost:8080/user/create
Django Version: 1.5.1
Exception Type: TypeError
Exception Value: ____init____() got an unexpected keyword argument 'instance'
Exception Location: /place/venv/local/lib/python2.7/site-packages/django/views/generic/edit.py in get_form, line 35
Python Executable: /place/venv/bin/python
Python Version: 2.7.3

views.py

class UserCreateView(CreateView):
    model = models.User
    form_class = forms.UserForm

urls.py

url(r'^user/create$', UserCreateView.as_view(), name='user_create'),

forms.py

class UserForm(forms.Form):
    GROUP_CHOICES = [(-1, '[Choose]')]
    GROUP_CHOICES += [(group.id, group.name.capitalize()) for group in auth.models.Group.objects.all()]

    email = forms.EmailField(
        label='Email',
        widget=forms.TextInput(attrs={'placeholder': 'Email'})
    )
    first_name = forms.CharField(
        label='First Name',
        widget=forms.TextInput(attrs={'placeholder': 'First Name'})
    )
    last_name = forms.CharField(
        label='Last Name',
        widget=forms.TextInput(attrs={'placeholder': 'Last Name'})
    )
    password = forms.CharField(
        label='Password',
        widget=forms.PasswordInput(attrs={'placeholder': 'Password'})
    )
    password_validation = forms.CharField(
        label='Repeat Password',
        widget=forms.PasswordInput(attrs={'placeholder': 'Repeat Password'})
    )
    mobile_number = forms.CharField(
        label='Mobile Number',
        widget=forms.TextInput(attrs={'placeholder': 'Mobile Number'})
    )
    office_number = forms.CharField(
        label='Office Number',
        widget=forms.TextInput(attrs={'placeholder': 'Office Number'})
    )
    group = forms.ChoiceField(
        label='Group',
        choices=GROUP_CHOICES
    )

    def clean_password_validation(self):
        if self.cleaned_data['password'] == self.cleaned_data['password_validation']:
            return self.cleaned_data['password_validation']
        else:
            raise forms.ValidationError('Passwords don\'t match')

    def clean_group(self):
        if self.cleaned_data['group'] != -1:
            return self.cleaned_data['group']
        else:
            raise forms.ValidationError('Please, choose a group')

models.py

class User(models.Model):
    user = models.OneToOneField(auth.models.User)
    mobile_number = models.CharField(max_length=64)
    office_number = models.CharField(max_length=64)

2 个解决方案

#1


50  

I suspect class UserForm should be model form. You may want to change fields, but it should be derived from `ModelForm.

我怀疑类UserForm应该是模型形式。您可能想要更改字段,但它应该来自“ModelForm”。

So change form definition to

所以改变形式定义为

class UserForm(forms.ModelForm):
   class Meta:
       model = User
       fields = [...] # list of fields you want from model

   #or define fields that you want.
   ....

#2


1  

forms.py Defines Fields in Square Brackets like fields=['field 1', 'field 2',...]

形式。py定义了方括号中的字段,比如字段=['字段1','字段2',…]

class CustomerForm(forms.ModelForm):        
    class Meta:
        model = Customer
        fields = ['fname','lname','email','address','city','state','zip','username','password','age','mobile','phone']

#1


50  

I suspect class UserForm should be model form. You may want to change fields, but it should be derived from `ModelForm.

我怀疑类UserForm应该是模型形式。您可能想要更改字段,但它应该来自“ModelForm”。

So change form definition to

所以改变形式定义为

class UserForm(forms.ModelForm):
   class Meta:
       model = User
       fields = [...] # list of fields you want from model

   #or define fields that you want.
   ....

#2


1  

forms.py Defines Fields in Square Brackets like fields=['field 1', 'field 2',...]

形式。py定义了方括号中的字段,比如字段=['字段1','字段2',…]

class CustomerForm(forms.ModelForm):        
    class Meta:
        model = Customer
        fields = ['fname','lname','email','address','city','state','zip','username','password','age','mobile','phone']