2016-08-25 6 views
0

私はdjangoの2つのフォームを扱うためのビューを作成しようとしています。 ビューのこの種のは、「サインアップ」と「ログイン」のために使用されているのと同じテンプレートである(例えば、modal構造、例えばhttp://bootsnipp.com/snippets/featured/login-amp-signup-forms-in-panelDjangoの一般的な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を持っています

私はこのmodelformviewGETの要求を実装するために開始します。

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()がエラーを発生していることに気づきました。しかし、私はエラーの原因をキャッチしませんでした。

助けが必要です。

答えて

1

これはUpdateViewなので、Djangoはメインフォームがモデルインスタンスの値を表示するために使用するModelFormであると予想しています。メインと第2のフォームクラスを入れ替えて問題を解決できるかもしれません。

+0

ところで、なぜ私はUpdateViewを継承すべきですか? .. 私はそれを理解することはできません。 – user3595632

関連する問題