How do I edit a record that already exists in the Django database and does not add another one?

2

Hi! I've been trying to edit my resgistros in django for some time but instead I add a new one, please someone to help me.

This is my editing function:

def editarempleado (request, id_empleado):
    p = Empleados.objects.get(pk=id_empleado)
    if request.method == "POST":
        form = EmpleadoForm(request.POST,instance=p)
        if form.is_valid():
            form.save()
            return redirect ('empleados')
    else:
        form = EmpleadoForm(instance=p) 

    ctx = {'formulario' : form}

    return render_to_response("empleados/editar.html", ctx, context_instance=RequestContext(request))

This is my url:

url(r'^editar/(?P<id_empleado>\d+)$', SGregorio_views.editarempleado, name='editar'),

This is my template:

{% load staticfiles%}

<head>
    <title>San Gregorio</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel='stylesheet' type='text/css' href='{% static "css/estilos.css" %}'>
    <link rel='stylesheet' type='text/css' href='{% static "css/bootstrap.min.css" %}'>
    <link rel='stylesheet' type='text/css' href='{% static "css/font-awesome.min.css" %}'>
    <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,300,700' rel='stylesheet' type='text/css'>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
    <script src='{% static "js/bootstrap.min.js" %}'></script>
    <script src='{% static "js/estilos.js" %}'></script>
</head>
<div class="modal-header">
    <button type="button" class="cerrarmodal">
        <a href="{% url 'empleados' %}"> <i class="fa fa-close"> </i></a>
    </button>
    <h4> <span><i class="fa fa-plus"></i></span>Actualizar empleado</h4>
</div>
<div class="modal-body">
    <div class="container-fluid">
        <form class="formatolinea" method="post" name="Formulario">
            {% csrf_token %}
            <label>Codigo</label>
            <input type="number" value="{{id_empleado}}">
            <label>Nombre</label>
            {{formulario.nombre}}
            <label>Apellidos</label>
            {{formulario.apellidos}}
            <label>tipo de documento</label>
            {{formulario.tipo_documento}}
            <label>Número de documento</label>
            {{formulario.numero_documento}}
            <label>Fecha de nacimiento</label>
            {{formulario.fecha_nacimiento}}
            <label>Edad</label>
            {{formulario.edad}}
            <label>Sexo</label>
            {{formulario.sexo}}
            <label>dirección</label>
            {{formulario.direccion}}
            <label>teléfono</label>
            {{formulario.telefono}}
            <label>correo electrónico</label>
            {{formulario.email}}
            <label>Fecha de ingreso</label>
            {{formulario.fecha_ingreso}}
            <label>Tiempo laborando</label>
            {{formulario.tiempo_laborando}}
            <label>Tipo de contrato </label>
            {{formulario.tipo_contrato}}
            <label>Salario</label>
            {{formulario.salario}}
            <label>EPS</label>
            {{formulario.eps}}
            <label>AFP</label>
            {{formulario.afp}}
            <label>Cesantias</label>
            {{formulario.cesantias}}
            <label>Seguro Exequial</label>
            {{formulario.seguro_exequial}}
            <label>Crediflores</label>
            {{formulario.cesantias}}
            <label>Cargo</label>
            {{formulario.cargo}}
            <label>Cuenta banco</label>
            {{formulario.cuenta}}
            <button class="guardar" type="submit"><i class="fa fa-save"></i> Guardar</button>
            <button class="cancelar" type="reset"> <a href="{% url 'empleados' %}"><i class="fa fa-close"></i> Cancelar </a></button>
        </form>
    </div>
</div>
</div>

Someone to help me please.

    
asked by Angie Lizeth Santiago Piñeros 14.09.2016 в 21:07
source

1 answer

0
def editarempleado (request, id_empleado):
  p = Empleados.objects.get(pk=id_empleado) #aqui tienen tu objeto de tipo Empleado
  if request.method == "POST":
     form = EmpleadoForm(request.POST,instance=p)
     if form.is_valid():
         form.save() #aqui estas guardando diractamente el formulario en la base de datos
         return redirect ('empleados')
 else:
    form = EmpleadoForm(instance=p) 

 ctx = {'formulario' : form}

 return render_to_response("empleados/editar.html", ctx, context_instance=RequestContext(request))

to update a record you have to access the attribute of your object and modify it then save it

def editarempleado (request, id_empleado):
  p = Empleados.objects.get(pk=id_empleado)
  if request.method == "POST":
     form = EmpleadoForm(request.POST,instance=p)
     if form.is_valid():
        p.nombre_empleado = request.POST['nuevo_nombre'] #nose que quieres editar solo es un ejemplo
        p.apellido_empleado = request.POST['nuevo_apellid'] #solo es un ejemplo
        p.save()
        return redirect ('empleados')
     else : 
        form = EmpleadoForm(instance=p)
        ctx = {'formulario' : form}
        return render_to_response("empleados/editar.html", ctx, context_instance=RequestContext(request)) #esto lo pongo porque si el formulario no es valido tiene que devolver el error (estoy repitiendo mucho codigo arreglalo)
 else:
    form = EmpleadoForm(instance=p) 

 ctx = {'formulario' : form}

 return render_to_response("empleados/editar.html", ctx, context_instance=RequestContext(request))
    
answered by 15.09.2016 / 04:01
source