2017-10-12 1 views
1

post에 따르면 내 장고 응용 프로그램에서 Class Based Views (CBV)을 얻기 위해 전체 스크립트를 수정하려고합니다.함수 기반 뷰를 클래스 기반 뷰로 마이그레이션

나는 CBV를 처음 사용하기 때문에 어떤 도움을 받고 싶습니다.

내 이전 스크립트 기능은 다음과 같습니다

@login_required 
def IdentityIndividuForm(request) : 

    success = False 
    query_Nom_ID = query_Prenom_ID = query_VilleNaissance_ID = None 

    if 'recherche' in request.GET: 

     query_Nom_ID = request.GET.get('q1NomID') 
     query_Prenom_ID = request.GET.get('q1PrenomID') 
     query_VilleNaissance_ID = request.GET.get('q1VilleNaissanceID') 

     sort_params = {} 

     lib.Individu_Recherche.set_if_not_none(sort_params, 'Nom__icontains', query_Nom_ID) 
     lib.Individu_Recherche.set_if_not_none(sort_params, 'Prenom__icontains', query_Prenom_ID) 
     lib.Individu_Recherche.set_if_not_none(sort_params, 'VilleNaissance__icontains', query_VilleNaissance_ID) 

     query_ID_list = Individu.objects.filter(**sort_params) 

    else : 
     query_ID_list = Individu.objects.none() 

    if request.method == 'POST': 

     form = IndividuFormulaire(request.POST or None, request.FILES or None) 

     if form.is_valid() : 
      post = form.save() 

      return HttpResponseRedirect(reverse('IndividuResume', kwargs={'id': post.id})) 

    else : 
     form = IndividuFormulaire() 
     form.fields['Utilisateur'].initial = request.user.last_name + " " + request.user.first_name 

    context = { 
     "form" : form, 
     "Individu" : Individu, 
     "query_Nom_ID" : query_Nom_ID, 
     "query_Prenom_ID" : query_Prenom_ID, 
     "query_VilleNaissance_ID" : query_VilleNaissance_ID, 
     "query_ID_list" : query_ID_list, 
    } 

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

나는 내 기능에 GET 부분과 POST 부분을했지만, 두 부분은 독립적이다. 첫 번째는 내 데이터베이스에 대한 조사를 할 수 있습니다. 두 번째는 내 데이터베이스에 개체를 만들 수 있습니다.

제 질문은 : CBV 기반 기능으로 GET 부분을 어떻게 덮어 쓸 수 있습니까?

내 새로운 기능 form_valid(self, form)이 제대로 작동하지만 GET 부분을 CBV 부분으로 마이그레이션하는 것을 극복하지 못했습니다.

감사합니다.

답변

1

당신은 당신이 원하는대로 처리를 수행 한 후, 최초의 슈퍼 상황에 맞는 데이터를 얻을, 그것을 시도하고 그 후 기본 CreateView으로 당신

와 경연 데이터를 업데이트 할 수는 다음과 같이, get 방법을 제공하는 ProcessFormView의 서브 클래스 :

def get(self, request, *args, **kwargs): 
    form_class = self.get_form_class() 
    form = self.get_form(form_class) 
    return self.render_to_response(self.get_context_data(form=form)) 

그래서 당신과 함께 get 메소드를 오버라이드 (override)하려고 할 수 return 등 :

return self.render_to_response(self.get_context_data(request, form=form)) 

당신이 너무과 같이 믹스 인 사용하려면 여기에 체크 @login_required 부분을 놓친 내가, 여기에 또 다른 문제를 참조 get_context_data

def get_context_data(self, **kwargs) : 

    context_data = super(IdentityIndividuFormView, self).get_context_data(**kwargs) 

    if 'recherche' in self.request.GET: 

     query_Nom_ID = self.request.GET.get('q1NomID') 
     query_Prenom_ID = self.request.GET.get('q1PrenomID') 
     query_VilleNaissance_ID = self.request.GET.get('q1VilleNaissanceID') 

     sort_params = {} 

     lib.Individu_Recherche.set_if_not_none(sort_params, 'Nom__icontains', query_Nom_ID) 
     lib.Individu_Recherche.set_if_not_none(sort_params, 'Prenom__icontains', query_Prenom_ID) 
     lib.Individu_Recherche.set_if_not_none(sort_params, 'VilleNaissance__icontains', query_VilleNaissance_ID) 

     query_ID_list = Individu.objects.filter(**sort_params) 
     context_data['queryset'] = query_ID_list 

    else : 
     query_ID_list = Individu.objects.none() 
     context_data['queryset'] = query_ID_list 

    return context_data 
+0

내 질문이나 스크립트가 좋지 않을 수도 있지만 템플릿에 두 가지 다른 점이 있습니다. 연구 양식 사람들이 존재하는지 아닌지)와 CreateForm. 그러나 두 요소는 모두 독립적입니다. 'get_context_data'는 아마도 좋은 함수가 아닐까요? – Deadpool

+0

불행히도, 전적으로 당신을 이해하지 못합니다, 당신은 질문에 현재 코드 대신 논리를 추가 할 수 있습니다. –

+0

나는 내 질문을 편집 할 것입니다. 그러나 데이터베이스에서 몇 가지 연구를하고 클래스 기반 뷰를 사용하여 템플릿에 결과를 표시하려면 어떻게 작성할 수 있습니까? – Deadpool

1

:

from django.contrib.auth.mixins import LoginRequiredMixin 

class IdentityIndividuFormView(LoginRequiredMixin, CreateView) : 

을 그리고 난에 가정 GET 요청의 경우 다음을 사용하여 컨텍스트를 업데이트 할 수 있습니다.

+0

로그인 해 주셔서 감사합니다. 하지만 내 첫 질문은 : 어떻게 동일한 템플릿에 독립적 인 두 가지 다른 기능을 가질 수 있습니다 :/ – Deadpool

+0

귀하의 양식이 GET 요청을 사용하여 페이지를 표시하고 POST가 일부 데이터를 생성한다고 가정합니다. 그래서 전체 get 부분을 def get()으로 옮기고 form_valid() 메소드에 생성 부분을 남겨 둡니다. –

관련 문제