根据这个post,我试图修改我的整个脚本,以便在我的Django应用程序中获得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部分。
谢谢!
答案 0 :(得分: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
覆盖return
方法:
return self.render_to_response(self.get_context_data(request, form=form))
和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
答案 1 :(得分:1)
我在这里看到另一个问题,你在这里错过了@login_required部分检查,这样做就像这样使用mixin:
from django.contrib.auth.mixins import LoginRequiredMixin
class IdentityIndividuFormView(LoginRequiredMixin, CreateView) :
我想在GET请求的情况下你可以用这个来更新上下文:
def get(self, request, *args, **kwargs):