umesh-krishna / django_serverside_datatable

Server-side Datatable with Django
MIT License
26 stars 8 forks source link

Return choices label #14

Closed vidz1979 closed 2 years ago

vidz1979 commented 2 years ago

How do I return choices label?

columns = ['status'] return 1 and I want to return the text label 'ACTIVE'.

vidz1979 commented 2 years ago

Solved it!

from django.db.models import Value, When, Case, CharField

def display_value(choices, field):
    options = [When(**{field: k, "then": Value(v)}) for k, v in choices]
    return Case(*options, output_field=CharField())

class ColaboradorDataView(ServerSideDatatableView):
    my_fields = {
        "tipo_contrato_desc": display_value(TipoContrato.choices, "tipo_contrato"),
        "status_desc": display_value(ColaboradorStatus.choices, "status"),
    }
    queryset = Colaborador.objects.annotate(**my_fields)
    columns = [
        "id",
        "pessoa__nome",
        "equipe__nome",
        "cargo__nome",
        "tipo_contrato_desc",
        "status_desc",
    ]