2016-08-25 3 views
0

Я пытаюсь сделать django просмотров для работы с двумя формами. Этот вид зрения используется для «Signup» и «войти в систему» ​​находятся в одном шаблоне (например, modal структуры, например http://bootsnipp.com/snippets/featured/login-amp-signup-forms-in-panel)Django общий вид для работы с двумя формами происходят ошибки

И я получил представление о том, имеем дело с двумя формами здесь (https://chriskief.com/2012/12/30/django-class-based-views-with-multiple-forms/)

у меня есть один model для пользователя:

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') 

я начинаю реализовывать view для GET запроса с этим model и 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) 

И, наконец, я создаю 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, который будет использоваться для отображения значений из экземпляра модели. Возможно, вы сможете исправить проблему, заменив основной и второй классы форм.

+0

Кстати, почему я должен унаследовать UpdateView? .. Я не понимаю. – user3595632