es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Haciendo referencia a un campo ID de un formulario en Views.py.

Estoy intentando enviar la URL de una entrada de modelo por correo electrónico cuando se envía mi formulario.

Sin embargo, cuando hago referencia a mi form.id de la siguiente manera

  • '(http://localhost:8000/zipherJobCards/viewJobCard/'+form.cleaned_data['id']+')',

Obtengo el siguiente error

KeyError: ‘id’

¿Hay alguna forma correcta de hacer referencia al id de una entrada de esta manera?

Por favor, vea la función completa de send_mail aquí

def jobCard(request):
form = jobCardForm()

if request.method == 'POST':
    form = jobCardForm(request.POST)
    if form.is_valid():
        form.save()

        send_mail(
            'ZTS JOB CARD' + form.cleaned_data['jobNumber'],
            'Se ha cargado una nueva tarjeta de trabajo para ' + form.cleaned_data['customerName'] + ' con un costo total de ' + form.cleaned_data['totalCostOfJob'] + '(http://localhost:8000/zipherJobCards/viewJobCard/'+form.cleaned_data['id']+')',
            'it.zipher@gmail.com',
            ['it@zipher.co.za'],
            fail_silently=False,
        )

        return redirect('home')
    else:
        print(form.errors)

content = {'form':form}
return render(request, 'main/jobCard.html', content)
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que estás intentando acceder al id de la entrada del formulario en la función send_mail. Sin embargo, el diccionario form.cleaned_data no contiene el id de la entrada del formulario.

    Puedes acceder al id de la entrada del formulario usando el atributo form.instance.id.

    Entonces, puedes actualizar la función send_mail de la siguiente manera:

    def jobCard(request):
        form = jobCardForm()
    
        if request.method == 'POST':
            form = jobCardForm(request.POST)
            if form.is_valid():
                form.save()
    
                send_mail(
                    'ZTS JOB CARD' + form.cleaned_data['jobNumber'],
                    'Se ha cargado una nueva tarjeta de trabajo para ' + form.cleaned_data['customerName'] + ', con un costo total de' + form.cleaned_data['totalCostOfJob'] + '(http://localhost:8000/zipherJobCards/viewJobCard/'+form.instance.id+')',
                    'it.zipher@gmail.com',
                    ['it@zipher.co.za'],
                    fail_silently=False,
                )
    
                return redirect('home')
            else:
                print(form.errors)
    
        content = {'form':form}
        return render(request, 'main/jobCard.html', content)
    

    Esto debería solucionar el KeyError que estás recibiendo.

Comments are closed.