私はdjango
の2つのフォームを扱うためのビューを作成しようとしています。 ビューのこの種のは、「サインアップ」と「ログイン」のために使用されているのと同じテンプレートである(例えば、modal
構造、例えばhttp://bootsnipp.com/snippets/featured/login-amp-signup-forms-in-panel)Djangoの一般的な2つのフォームを扱うビューでエラーが発生する
そして私は、ここからの二つの形式(https://chriskief.com/2012/12/30/django-class-based-views-with-multiple-forms/)
を扱うのアイデアを得ましたfrom django.contrib.auth.models import AbstractUser
from django.db import models
GENDER_CHOICES = (
('M', '남'),
('F', '여'),
)
class ChachaUser(AbstractUser):
birth = models.DateField()
gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
REQUIRED_FIELDS = ['email', 'birth', 'gender', ]
そしてform
:
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import get_user_model
GENDER_CHOICES = (
('M', '남'),
('F', '여'),
)
class MyUserCreationForm(UserCreationForm):
birth = forms.DateField(
widget=forms.SelectDateWidget(
years=range(1970, 2015)
),
required=True,
)
gender = forms.ChoiceField(choices=GENDER_CHOICES, initial='M')
class Meta(UserCreationForm.Meta):
model = get_user_model()
fields = UserCreationForm.Meta.fields + ('birth', 'gender')
私は、ユーザーのために1 model
を持っています
私はこのmodel
とform
とview
GET
の要求を実装するために開始します。
from django.contrib.auth.forms import AuthenticationForm
from django.views.generic import UpdateView
from django.shortcuts import get_object_or_404
from django.core.urlresolvers import reverse_lazy
from users.forms import MyUserCreationForm
from users.models import ChachaUser
class LoginSignupView(UpdateView):
template_name = 'users/login.html'
form_class = AuthenticationForm
second_form_class = MyUserCreationForm
success_url = '/'
def get_context_data(self, **kwargs):
context = super(LoginSignupView, self).get_context_data(**kwargs)
if 'form' not in context:
context['form'] = self.form_class()
if 'form2' not in context:
context['form2'] = self.second_form_class()
return context
def get_object(self):
return get_object_or_404(ChachaUser, pk=1)
をそして最後に、私はuser/login.html
を作成して、URLを設定します。しかし、私がそれにアクセスするときにエラーが発生します。
Traceback (most recent call last):
File "/Users/Chois/.pyenv/versions/chacha_dabang/lib/python3.5/site-packages/django/core/handlers/base.py", line 149, in get_response
response = self.process_exception_by_middleware(e, request)
File "/Users/Chois/.pyenv/versions/chacha_dabang/lib/python3.5/site-packages/django/core/handlers/base.py", line 147, in get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/Chois/.pyenv/versions/chacha_dabang/lib/python3.5/site-packages/django/views/generic/base.py", line 68, in view
return self.dispatch(request, *args, **kwargs)
File "/Users/Chois/.pyenv/versions/chacha_dabang/lib/python3.5/site-packages/django/views/generic/base.py", line 88, in dispatch
return handler(request, *args, **kwargs)
File "/Users/Chois/.pyenv/versions/chacha_dabang/lib/python3.5/site-packages/django/views/generic/edit.py", line 275, in get
return super(BaseUpdateView, self).get(request, *args, **kwargs)
File "/Users/Chois/.pyenv/versions/chacha_dabang/lib/python3.5/site-packages/django/views/generic/edit.py", line 213, in get
return self.render_to_response(self.get_context_data())
File "/Users/Chois/Workspace/django/chacha_dabang/chacha_dabang/users/views/login_signup.py", line 18, in get_context_data
context = super(LoginSignupView, self).get_context_data(**kwargs)
File "/Users/Chois/.pyenv/versions/chacha_dabang/lib/python3.5/site-packages/django/views/generic/edit.py", line 122, in get_context_data
kwargs['form'] = self.get_form()
File "/Users/Chois/.pyenv/versions/chacha_dabang/lib/python3.5/site-packages/django/views/generic/edit.py", line 74, in get_form
return form_class(**self.get_form_kwargs())
File "/Users/Chois/.pyenv/versions/chacha_dabang/lib/python3.5/site-packages/django/contrib/auth/forms.py", line 147, in __init__
super(AuthenticationForm, self).__init__(*args, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'instance'
私はデバッグのためにembed()
を使用してget_object()
がエラーを発生していることに気づきました。しかし、私はエラーの原因をキャッチしませんでした。
助けが必要です。
ところで、なぜ私はUpdateViewを継承すべきですか? .. 私はそれを理解することはできません。 – user3595632