この問題は数日間私を悩ませていました。私はどこでも答えを見つけることができませんでした。私は実際にはバグだと思っていますが、私はdjango初心者です。私は間違って何かをしているかもしれないと思ったクラスベースのビューで遊ぶようになったばかりです。Typerror:__init __()に予期しないキーワード引数 'initial'があります。クラスベースのビューとシンプルなフォームを使用しようとするとき
私はモデルを更新するためにLoginRequiredMixinを使って簡単なUpdateViewを作成しましたが、うまく機能しますが、form.pyをカスタマイズして新鮮なフォームを使用しようとするとエラーが発生します。
Here`s私のコード:
models.py
class Profile(TimeStampedModel):
LANGUAGES = (
('pt_BR', 'Português(Brasil)'),
('en_US', 'English(USA)'),
)
user = models.OneToOneField('auth.User')
language = models.CharField(max_length=255, choices=LANGUAGES, default=LANGUAGES[0][0])
def get_absolute_url(self):
return reverse('edit-profile')
forms.py
class ProfileForm(forms.ModelForm):
class Meta:
model = Profile
fields = ('language',)
labels = {
'language': 'Idioma',
}
views.py
class ProfileUpdateView(LoginRequiredMixin, UpdateView):
form_class = ProfileForm
template_name = 'accounts/profile.html'
def get_object(self, queryset=None):
return self.request.user.profile
私のテンプレートに{{form.as_p}}を生成すると、これまでのところとてもうまくいっています。
def __init__(self):
super().__init__()
:ちょうどこれらの2行を挿入することで、私は、クリスピーフォームから任意のオブジェクトをインスタンス化する前であっても class ProfileForm(forms.ModelForm):
class Meta:
model = Profile
fields = ('language',)
labels = {
'language': 'Idioma',
}
def __init__(self):
super().__init__()
# self.helper = FormHelper()
# ... continue crispy form setup...
を:今、私は挿入することにより、forms.pyの私ProfileFormクラスをカスタマイズし始めた場合
私はページをロードしようとすると、私は次のようTypeError例外を取得:
__init__() got an unexpected keyword argument 'initial'
さて、私のunderstadingから、ちょうど任意の追加の引数なしで内部の__init__とsuper()を宣言することで、クラスは直前のように振る舞うべきではなく、私はトレースバックを得る:
Traceback (most recent call last):
File "\myvenv\lib\site-
packages\django\core\handlers\exception.py", line 41, in inner
response = get_response(request)
File "\myvenv\lib\site-
packages\django\core\handlers\base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
File "\myvenv\lib\site-
packages\django\core\handlers\base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "\myvenv\lib\site-
packages\django\views\generic\base.py", line 68, in view
return self.dispatch(request, *args, **kwargs)
File "\myvenv\lib\site-
packages\django\contrib\auth\mixins.py", line 56, in dispatch
return super(LoginRequiredMixin, self).dispatch(request, *args,
**kwargs)
File "\myvenv\lib\site-
packages\django\views\generic\base.py", line 88, in dispatch
return handler(request, *args, **kwargs)
File "\myvenv\lib\site-
packages\django\views\generic\edit.py", line 236, in get
return super(BaseUpdateView, self).get(request, *args, **kwargs)
File "\myvenv\lib\site-
packages\django\views\generic\edit.py", line 174, in get
return self.render_to_response(self.get_context_data())
File "\myvenv\lib\site-
packages\django\views\generic\edit.py", line 93, in get_context_data
kwargs['form'] = self.get_form()
File "\myvenv\lib\site-
packages\django\views\generic\edit.py", line 45, in get_form
return form_class(**self.get_form_kwargs())
TypeError: __init__() got an unexpected keyword argument 'initial'
私は、Python 3.6を使用しています。 2とDjango 1.11.5。
私はsuper().__ init __()を使うことを可能にする新しいPython 3の構文に惑わされていましたが、defで* argsと** kwargsも省略することができました。ありがとう! –