Ignore:
Timestamp:
Aug 9, 2011, 3:01:19 AM (14 years ago)
Author:
Alex Dehnert <adehnert@…>
Branches:
master, space-access, stable, stage, test-hooks
Children:
d8290de
Parents:
628e06c
git-author:
Alex Dehnert <adehnert@…> (08/09/11 03:01:19)
git-committer:
Alex Dehnert <adehnert@…> (08/09/11 03:01:19)
Message:

Make StaticWidget? work with Select fields too

File:
1 edited

Legend:

Unmodified
Added
Removed
  • asadb/util/db_form_utils.py

    r7f16c8e r9b911db  
    1 from django.forms.widgets import Widget, HiddenInput
     1from django.forms.widgets import Widget, Select, HiddenInput
    22from django.utils.safestring import mark_safe
    33from django.utils.html import conditional_escape
     4from itertools import chain
    45
    56class StaticWidget(Widget):
     
    1314        self.value = kwargs['value']
    1415        del kwargs['value']
     16        if 'choices' in kwargs:
     17            if kwargs['choices'] is not None:
     18                self.choices = kwargs['choices']
     19            else:
     20                self.choices = ()
     21            del kwargs['choices']
     22        else:
     23            self.choices = ()
    1524        super(StaticWidget, self).__init__(*args, **kwargs)
    1625        self.inner = HiddenInput()
     
    1928        return self.value
    2029
    21     def render(self, name, value, attrs=None, ):
     30    def render(self, name, value, attrs=None, choices=(), ):
    2231        if value is None:
    2332            value = ''
     33        label = value
     34        the_choices = chain(self.choices, choices)
     35        for choice_value, choice_label in the_choices:
     36            if choice_value == value:
     37                label = choice_label
    2438        # We have this inner hidden widget because that allows us to nicely
    2539        # handle a transition from StaticWidget to another widget type
     
    2741        # authenticated)
    2842        hidden_render = self.inner.render(name, value, attrs=attrs)
    29         return mark_safe(conditional_escape(value) + hidden_render)
     43        return mark_safe(conditional_escape(label) + hidden_render)
     44
     45    @classmethod
     46    def replace_widget(cls, formfield, value):
     47        choices = None
     48        choices = getattr(formfield.widget, 'choices', ())
     49        formfield.widget = cls(value=value, choices=choices)
Note: See TracChangeset for help on using the changeset viewer.