I'm trying to make django
views for dealing with two forms.
This kind of view is used for 'signup' and 'login' are in same template(For instance, modal
structure, e.g http://bootsnipp.com/snippets/featured/login-amp-signup-forms-in-panel)
And I got an idea of dealing with two forms from here (https://chriskief.com/2012/12/30/django-class-based-views-with-multiple-forms/)
I have one model
for user:
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', ]
And 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')
I start to implement view
for GET
request with this model
and form
:
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)
And finally I create user/login.html
and set url. But it occurs an error when I access it :
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'
I use embed()
for debug and realized that get_object()
occurs error. But I didn't catch what causes the error.
Need your helps.