Django-tables2 change yesno parameter for all BooleanColumn

I have a table.py where I would like to change the icons for True and False values ​​for each BooleanColumn. I know it can be changed with the yesno BooleanColumn parameter, but I don't know how to override the default for all BooleanColumns. Here is the tables.py code (aacsb, amba, equis, mba, bsc, msc, and doubedegree - BooleanFields):

from django_tables2 import Column, Table
from manager.models import Partner


class PartnerTable(Table):

    country_name = Column(accessor='country.name', verbose_name='Country')
    region_name = Column(accessor='country.region.name', verbose_name='Region')

    class Meta:
        model = Partner
        fields = ('name',
                  'country_name',
                  'region_name',
                  'website',
                  'aacsb',
                  'amba',
                  'equis',
                  'mba',
                  'bsc',
                  'msc',
                  'doubledegree',
                  )

      

+3


source to share


2 answers


1) So you can just override the yesno

default "βœ”, ✘" (it's easy str

):

some_name = BooleanColumn(yesno='1,2')

      

or remove text:

some_name = BooleanColumn(yesno=',')

      

2) Using css

, you can specify custom images (don't forget to install yesno=','

):

span.true {
    background: url(../img/true.gif) top center no-repeat;
}

span.false {
    background: url(../img/false.gif) top center no-repeat;
}

      



3) Specify additional attributes span

(but do not specify class

!):

some_name = BooleanColumn(attrs={'span': {'style': 'color:blue'}})

      

4) If for some reason you want to change the behavior of the default class settings ( true

or false

) - you must override BooleanColumn

its methodrender

from django.utils.html import escape
from django.utils.safestring import mark_safe
from django_tables2.utils import AttributeDict


class CustomBooleanColumn(BooleanColumn):
    def render(self, value):
        value = bool(value)
        text = self.yesno[int(not value)]
        html = '<span %s>%s</span>'

        class_name = 'some_class_false'
        if value:
            class_name = 'some_class_true'
        attrs = {'class': 'class_name'}

        attrs.update(self.attrs.get('span', {}))

        return mark_safe(html % (AttributeDict(attrs).as_html(), escape(text)))

      

And override the field

some_name = CustomBooleanColumn(yesno=',')

      

+4


source


Here is the complete code now, thanks to madzohan's answer. Please note that I used django-bootstrap3 so that I can use the bootstrap icons:



from django_tables2 import BooleanColumn, Column, Table
from django.utils.safestring import mark_safe
from django_tables2.utils import AttributeDict
from manager.models import Partner


class BootstrapBooleanColumn(BooleanColumn):
    def __init__(self, null=False, **kwargs):
        if null:
            kwargs["empty_values"] = ()
        super(BooleanColumn, self).__init__(**kwargs)

    def render(self, value):
        value = bool(value)
        html = "<span %s></span>"

        class_name = "glyphicon glyphicon-remove"
        if value:
            class_name = "glyphicon glyphicon-ok"
        attrs = {'class': class_name}

        attrs.update(self.attrs.get('span', {}))

        return mark_safe(html % (AttributeDict(attrs).as_html()))


class PartnerTable(Table):
    country_name = Column(accessor='country.name', verbose_name='Country')
    region_name = Column(accessor='country.region.name', verbose_name='Region')
    aacsb = BootstrapBooleanColumn()
    amba = BootstrapBooleanColumn()
    equis = BootstrapBooleanColumn()
    mba = BootstrapBooleanColumn()
    bsc = BootstrapBooleanColumn()
    msc = BootstrapBooleanColumn()
    doubledegree = BootstrapBooleanColumn()

    class Meta:
        model = Partner
        fields = ('name',
                  'country_name',
                  'region_name',
                  'website',
                  'aacsb',
                  'amba',
                  'equis',
                  'mba',
                  'bsc',
                  'msc',
                  'doubledegree',
                  )

      

0


source







All Articles