Получение человекочитаемого значения символьного поля с вариантами выбора через get_F00_display в Django views.py

Что я хочу сделать :

Отображение человекочитаемого значения поля charfield с вариантами выбора через get_F00_display или другое в views.py, а затем в template.

У меня есть модель Leave для управления листьями и я хочу отобразить шаблон со всеми листьями, связанными с аутентифицированным пользователем.

Что я сделал :

Конечно, я читал документацию Django (4.1) и нашел что-то интересное с get_F00_display, но не могу заставить его работать нормально.

model.py (упрощенный)

class Leave(CommonFields):

    LEAVES_TYPES = [
            ('10', _('Type 1')),
            ('20', _('Type 2')),
            ('30', _('Type 3')),
            ]


    owner = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
    type = models.CharField(max_length=3, choices=LEAVES_TYPES, null=True, default="10")


    def __str__(self):
        return self.owner.first_name + " " + self.owner.last_name + " : du " + self.begin_date.strftime("%d-%m-%Y") + " au " + self.end_date.strftime("%d-%m-%Y")

views.py

from django.shortcuts import render
from django.utils.translation import gettext as _

from .models import Leave

from django.views import generic

class LeaveListView(generic.ListView):
    model = Leave
    context_object_name = 'leave_list'

    def get_queryset(self):
        return Leave.objects.filter(is_active=True).values('type', 'begin_date','end_date','range','comment','status')

    def get_context_data(self, **kwargs):
        # Call the base implementation first to get the context
        context = super(LeaveListView, self).get_context_data(**kwargs)
        # Create any data and add it to the context
        context['colHeaders'] = ['Type',
                       'From',
                       'To.',
                       'Range',
                       'Comment',
                       'Status',]
        return context

leave_list.html

{% extends "main/datatables.html" %}

<!-- TABLE TITLE -->
{% block tableTitle %}Leaves{% endblock %}

<!-- TABLE HEADER -->
{% block tableHeader %}
    {% if colHeaders %}
        {% for header in colHeaders %}
            <th>{{header}}</th>
        {% endfor %}
    {% else %}
        <p>No results</p>
    {% endif %}
{% endblock %}

<!-- TABLE BODY -->
{% block tableBody %}
    {% if leave_list %}
        {% for leave in leave_list %}
        <tr>
            <td>{{leave.type}}</td>
            <td>{{leave.begin_date}}</td>
            <td>{{leave.end_date}}</td>
            <td>{{leave.range}}</td>
            <td>{{leave.comment}}</td>
            <td>{{leave.status}}</td>
        </tr>  
        {% endfor %}
    {% else %}
        <p>No results</p>
    {% endif %}
{% endblock %}

<!-- TABLE FOOTER -->
{% block tableFooter %}
    {% if colHeaders %}
        {% for header in colHeaders %}
            <th>{{header}}</th>
        {% endfor %}
    {% else %}
        <p>No results</p>
    {% endif %}
{% endblock %}

Проблема :

{{leave.type}}

возвращает ключ выбора, но я пытаюсь отобразить человекочитаемое название в LEAVES_TYPES, например "Тип 1"...

Что я пробовал :

Используя get_F00_display таким образом : get_type_display в моем views.py :

def get_queryset(self):
        return Leave.objects.filter(is_active=True).values(get_type_display, 'begin_date','end_date','range','comment','status')

То же самое в шаблоне, но не отображается читаемое имя...

Вернуться на верх