django - Search Form for NullBooleanField -
i write search form django model contains column is_ok nullbooleanfield.
i want have 4 choices:
- search instances column true.
- search instances column false.
- search instances column null.
- ignore column in search
up use this:
is_ok = forms.nullbooleanfield(required=false) but renders 3 options (as drop-down list).
how distinguish between "is null" , "not set" here?
as @alasdair said, you'll have create custom field:
class unsettype:     def __str__(self):         return '__unset__'  unset = unsettype()  class unsetornullbooleanselect(nullbooleanselect):     def __init__(self, attrs=none):         choices = (             ('__unset__', ugettext_lazy('unset')),             ('1', ugettext_lazy('unknown')),             ('2', ugettext_lazy('yes')),             ('3', ugettext_lazy('no')),         )         super().__init__(attrs, choices)      def render(self, name, value, attrs=none):         try:             value = {                 true: '2', false: '3', none: '1',                 '2': '2', '3': '3', '1': '1',             }[value]         except keyerror:             value = '__unset__'         return super().render(name, value, attrs)      def value_from_datadict(self, data, files, name):         value = data.get(name)         return {             '1': none, none: none, 'none': none, 'none': none, 'null': none,             '2': true, true: true, 'true': true,             '3': false, 'false': false, false: false,         }.get(value, unset)  class unsetornullbooleanfield(nullbooleanfield):      widget = unsetornullbooleanselect      def to_python(self, value):         if value in (true, 'true', 'true', '1'):             return true         elif value in (false, 'false', 'false', '0'):             return false         elif value in (none, 'none', 'none', 'null'):             return none         else:             return unset 
Comments
Post a Comment