Django将POST请求绑定到基于类的视图

时间:2017-10-23 08:08:40

标签: django django-forms classview

我正在尝试构建一个基于类的视图来处理审核/更新表单。表单使用以下代码构建:

    class ProcesoCandidato(forms.Form):
    ''''''
    hrfrmreclutado_nombres = forms.CharField()
    hrfrmreclutado_se_presento = forms.ChoiceField(
        choices=())
    hrfrmreclutado_cambio_de_cita = forms.DateField()
    hrfrmreclutado_entrevista = forms.ChoiceField()
    hrfrmreclutado_contratado = forms.ChoiceField()
    hrfrmreclutado_motivo_de_rechazo = forms.ChoiceField()
    hrfrmreclutado_notas = forms.CharField()

    def clean(self):
        ''''''
        cleaned_data = super(ProcesoCandidato, self).clean()
        clnfrmreclutado_nombres = \
        clnfrmreclutado_se_presento = \
            self.cleaned_data.get('hrfrmreclutado_se_presento', '')
        clnfrmreclutado_cambio_de_cita = \
            self.cleaned_data.get('hrfrmreclutado_cambio_de_cita', '')
        clnfrmreclutado_entrevista = \
            self.cleaned_data.get('hrfrmreclutado_entrevista', '')
        clnfrmreclutado_contratado = \
            self.cleaned_data.get('hrfrmreclutado_contratado', '')
        clnfrmreclutado_motivo_de_rechazo = \
            self.cleaned_data.get('hrfrmreclutado_motivo_de_rechazo', '')
        clnfrmreclutado_notas = \
            self.cleaned_data.get('hrfrmreclutado_notas', '')

    def __init__(self, *args, **kwargs):
        ''''''
        super(ProcesoCandidato, self).__init__()

        self.fields['hrfrmreclutado_se_presento'].choices = [
            ('', '------'),
            ('Si', 'Si'),
            ('No', 'No'),
            ]
        self.fields['hrfrmreclutado_entrevista'].choices = [
            ('', '------'),
            ('Si', 'Si'),
            ('No', 'No'),
            ]
        self.fields['hrfrmreclutado_contratado'].choices = [
            ('', '------'),
            ('Si', 'Si'),
            ('No', 'No'),
            ]
        self.fields['hrfrmreclutado_motivo_de_rechazo'].choices = \
            [('', '------')] + [(c.pk, c.razonrechazo)
                for c in models.RazonRechazo.objects.all()]

views文件包含一个基于类的视图来处理GET和POST方法:

class ProcesoRH(View):
''''''
form_class = ProcesoCandidato
initial = {
    'procesorh_llego': 'No',
    'procesorh_entrevista': 'No',
    'procesorh_contratado': 'No',
    'procesorh_rechazo': '',
    'procesorh_notas': ''}
template_name = 'sitio_rh/rhprocess.html'

def get(self, request, *args, **kwargs):
    reclutadoid = request.GET['candidato']
    procesodata = models.ProcesoRH.objects.filter(
        procesorh_reclutado_id=reclutadoid)

    if procesodata.exists() is False:
        objproceso = models.ProcesoRH()
        objproceso.procesorh_reclutado_id = reclutadoid
        objproceso.save()
    else:
        pass

    reclutadodata = models.Reclutado.objects.get(pk=reclutadoid)
    form = self.form_class(initial=self.initial)
    edad = self.cualedad(request, reclutadoid)

    return render(request, self.template_name, {
    'form': form,
    'username': self.request.user,
    'titulo': 'Proceso de Entrevista - RH',
    'marca': 'Plataforma electronica de Reclutamiento',
    'section': 'Proceso RH',
    'candidatoinfo': reclutadodata,
    'rhdata': procesodata,
    'reclutadoedad': edad
    })

def post(self, request, *args, **krargs):
    form = self.form_class(request.POST)
    if form.is_valid():
        sucess = form.is_valid()
        return HttpResponse(sucess)
    else:
       error = ('Bound: %s Valid: %s') % (form.is_bound, form.is_valid())
       return HttpResponse(error)

def cualedad(self, request, reclutadoid):
    '''Calcular la edad a partir de la fecha de nacimiento'''
    reclutadodata = models.Reclutado.objects.get(pk=reclutadoid)
    reclutadonacimiento = reclutadodata.rec_fecha_nacimiento
    fechaactual = datetime.date.today()
    deltaedad = (fechaactual - reclutadonacimiento)
    edad = int(deltaedad.days) / 365
    return edad.__int__()

def __init__(self, *args, **kwargs):
    ''' Instanciamiento, obtenemos los valores iniciales.'''
    super(ProcesoRH, self).__init__()

该视图适用于GET方法,该方法标识记录,检索已存在的数据,并将其作为表单的初始数据。 表单本身一旦呈现就会有一个“更新”按钮,触发POST操作。当我进入POST方法时,我可以检索表单是否未绑定且无效。我知道我需要在尝试使用is_valid方法之前将表单绑定到更新/添加的数据,但我无法这样做。非常感谢任何指导。

0 个答案:

没有答案