2017-03-08 4 views
1

일반보기를 사용하면 django의 멋진 기능을 템플릿에 "이 필드가 필요합니다!"와 같이 게시합니다.Form validate like GenericView

내가 알고있는 것으로부터 CreateView는 form_invalid이라는 메서드를 상속받으며 self.render_to_response(self.get_context_data(form=form))을 리턴합니다. 그리고 저는 그게 마술을하고있는 것입니다.

이제 양식을 쓰고 있으며 해당 기능을 사용할 수 있는지 궁금한가요?

custom_user 모델을 만들고 간단한 만들기 기능을 만들려고합니다. 지금까지 내가 가지고 :

Models.py

class Custom_User(AbstractBaseUser): 

    email = models.EmailField(max_length=250, unique=True) 
    password = models.CharField(max_length=100) 

    USERNAME_FIELD = 'email' 

을 forms.py

class create_User_Form(forms.ModelForm): 

    confirm_password = forms.CharField(widget = forms.PasswordInput(attrs={'class' :'form-control'})) 

    class Meta: 
     model = Custom_User 
     fields = ['email', 'password'] 

     widgets = { 
        'email' : forms.TextInput(attrs={'class' :'form-control'}), 
        'password' : forms.PasswordInput(attrs={'class' :'form-control'}), 
     } 

    def clean(self): 
     cleaned_data = super(create_User_Form, self).clean() 
     password = cleaned_data.get("password") 
     confirm_password = cleaned_data.get("confirm_password") 

     if password != confirm_password: 
      raise forms.ValidationError(
       "password and confirm_password does not match" 
      ) 

     return self.cleaned_data 

urls.py

urlpatterns = [ 
      url(r'^$', views.index, name='index'),  

      url(r'^create_user/$', views.create_user, name='create_user'), 
] 

views.py

def create_user(request): 

    form = create_User_Form(request.POST) 

    if form.is_valid(): 
     print('valid') 
    else: 
     print('error')   

    return redirect('Eapp:index') 

def index(request): 

    create_user_form_ = create_User_Form() 

    context = { 
       'create_user_form' : create_user_form_, 
    } 

    return render(request, 'index.html', context) 
+0

입니다. [docs] (https://docs.djangoproject.com/en/1.10/ref/class-based-views/generic)의'CreateView'를보십시오. -editing/# django.views.generic.edit.CreateView). View 클래스에서'form_class'를 지정할 수 있습니다. –

+0

@gitblame 나는 그 문서에 대해 정말로 이해하지 못하고있다. 내 색인 페이지를 렌더링하는보기 기능으로 내 게시물을 편집했습니다. 그것이 CreateView를 보여주고 싶습니다.이게 훨씬 복잡한 일입니까? – vandelay

+0

자습서가 필요한 경우 godjango의 CBV에 대한 [these] (https://godjango.com/15-class-based-views-part-1-templateview-and-redirectview/) 자습서를 시청하는 것이 좋습니다. –

답변

2

함수 기반 뷰와 클래스 기반 뷰가 섞여있는 것처럼 보입니다. 당신이 시도한 것은 기능 기본보기입니다. 완료하기 위해 이것이 색인을 결합하고 함께 갈 필요 기능을 포함하기 때문에 사용자의 방법을 만드는 것이이

def create_user(request): 
    if request.method == 'POST': 
     create_user_form_ = create_User_Form(request.POST) 
     if form.is_valid(): 
      print('valid') 
      return redirect('Eapp:index') 
     else: 
      print('error')   

    else: 
     create_user_form_ = create_User_Form() 

    context = { 
       'create_user_form' : create_user_form_, 
    } 

    return render(request, 'index.html', context) 

주처럼 보일 필요가있다.

반면에 당신이 CreateView 코드를 사용하려면

정말있어 그

class UserCreate(CreateView): 
    model = Custom_User 
    form_class = create_User_Form 

많이 짧아집니다. 그러나 상세 검색을 추가 할 수 있습니다.

부수적으로. 파이썬에서 클래스 이름을 지정하는 표준 방법은 CreateUserForm

+0

답해 주셔서 감사합니다. 나는 물건을 더 위로 섞고 있었다. View에서 일종의 추가 기능이 있다고 생각했습니다. 그러나 무효 인 양식을 반환하면 오류가 표시됩니다. 양식이 그처럼 "재활용"될 수 있다는 생각을하지 못했습니다. – vandelay

+1

도움이 된 것을 기쁘게 생각합니다. 프로젝트에 가장 적합합니다. – e4c5