Modelo Empleado

models.py

class Empleado(models.Model):
    """ Modelo para tabla empleado """

    JOB_CHOICES = (
        ('0', 'CONTADOR'),
        ('1', 'ADMINISTRADOR'),
        ('2', 'ECONOMISTA'),
        ('3', 'OTRO'),
    )
    first_name = models.CharField('Nombres', max_length=60)
    last_name = models.CharField('apellidos', max_length=60)
    full_name = models.CharField(
        'Nombres completos',
        max_length=120,
        blank=True
    )
    job = models.CharField('Teabajo', max_length=1, choices=JOB_CHOICES)   #para el get_job_display
    departamento = models.ForeignKey(Departamento, on_delete=models.CASCADE)
    avatar = models.ImageField(upload_to='empleado', blank=True, null=True)
    habilidades = models.ManyToManyField(Habilidades)
    hoja_vida=RichTextField()

    class Meta:
        verbose_name = 'Mi Empleado'
        verbose_name_plural = 'Empleados de la empresa'
        ordering = ['-first_name', 'last_name']
        unique_together = ('first_name', 'departamento')


    def __str__(self):
        return str(self.id) + '-' + self.first_name + '-' + self.last_name

views.py


from django.urls import reverse_lazy
from django.views.generic import (
    ListView,
    DetailView,
    CreateView,
    TemplateView,
    UpdateView,
    DeleteView
)
# models
from .models import Empleado
# forms
from .forms import EmpleadoForm

class EmpleadoDetailView(DetailView):
    model = Empleado
    template_name = "persona/detail_empleado.html"


forms.py

from django import forms

from .models import Empleado


class EmpleadoForm(forms.ModelForm):
    
    class Meta:
        model = Empleado
        fields = (
            'first_name',
            'last_name',
            'job',
            'departamento',
            'avatar',
            'habilidades',
        )
        widgets = {
            'habilidades': forms.CheckboxSelectMultiple()
        }

urls.py

    path(
        'ver-empleado/<pk>/', 
        views.EmpleadoDetailView.as_view(),
        name='empleado_detail'
    ),

templates/persona/detail_empleado.html

<h1>Detalle de un empelado </h1>
{{ empleado }}

<h3>Todos los datos:</h3>
<p>{{ empleado.first_name }}</p>
<p>{{ empleado.last_name }}</p>
<p>{{ empleado.departamento }}</p>
<p>{{ empleado.habilidades }}</p>

 

ENVIAR UNA VARIABLE EXTRA

   views.py enviar una variable extra

class EmpleadoDetailView(DetailView):
    model = Empleado
    template_name = "persona/detail_empleado.html"

    def get_context_data(self, **kwargs):
        context = super(EmpleadoDetailView, self).get_context_data(**kwargs)
        #toot un proceso
        context['titulo'] = 'Empleado del mes'
        return context

templates/persona/detail_empleado.html

<div class="grid-container">
    <div class="grid-x grid-margin-x align-center">
        <div class="cell large-4 card" style="width: 300px; margin-top: 10px;">
            <div class="card-divider">
            <h1>Detalle de un empelado {{ titulo }}</h1>
             {{ empleado }}
            <div class="card-divider">
             {{ empleado.get_job_display }}    #solo funciona para los choises #1,contador
            </div>
            </div>
             {% if empleado.avatar %}
                <img src="{{ empleado.avatar.url }}">
            {% else %}
                <img src="{% static 'img/20.jpg' %}">
            {% endif %}
            
            <div class="card-section">
                <h4>{{ empleado.full_name }}</h4>
                <p>{{ empleado.last_name }}</p>
                <p>{{ empleado.departamento.shor_name }}</p>
                <p><span class="label">Habilidades:</span></p>
                <ul class="vertical menu">
                    {% for h in empleado.habilidades.all %}
                      <li>{{ h.hablidad }}</li>
                    {% endfor %}
                </ul>
            </div>
        </div>
    </div>
</div>