from django.conf import settings from django.db.models.query import QuerySet from django.forms.widgets import Select, Widget from django.utils.safestring import mark_safe from django.utils.html import conditional_escape class FromWidget(Select): def __init__(self, *args, **kwargs): super(FromWidget, self).__init__(*args, **kwargs) self.full_power_on = [] self.reduced_to_set = [] def render(self, name, value, attrs=None, choices=()): all_choices = list(self.choices) + list(choices) if (len(all_choices) != 1 or (isinstance(all_choices[0][1], (list, tuple)) and len(all_choices[0][1]) != 1)): base = super(FromWidget, self).render(name, value, attrs, choices) else: option = all_choices[0] if isinstance(option[1], (list, tuple)): option = option[1][0] value = option[0] text = option[1] base = u'%s' % (conditional_escape(value), conditional_escape(name), conditional_escape(name), conditional_escape(text)) base += u' ' + conditional_escape(self.submitter) + u'' if self.full_power_on: base += '
' return mark_safe(base) class ReadOnlyWidget(Widget): def render(self, name, value, attrs=None): html = u' ' % (conditional_escape(name), conditional_escape(value or '')) return mark_safe(html) class ButtonWidget(Widget): def __init__(self, *args, **kwargs): self.label = kwargs.pop('label', None) self.show_on = kwargs.pop('show_on', None) self.require = kwargs.pop('require', None) self.required_label = kwargs.pop('required_label', None) super(ButtonWidget, self).__init__(*args, **kwargs) def render(self, name, value, attrs=None): html = u' ' % conditional_escape(self.show_on) html += u' ' % conditional_escape(self.label) if self.require: for i in self.require: html += u' ' % conditional_escape(i) required_str = u'Please fill in %s to attach a new file' % conditional_escape(self.required_label) html += u' ' % conditional_escape(required_str) html += u'' % conditional_escape(self.label) return mark_safe(html) class ShowAttachmentsWidget(Widget): def render(self, name, value, attrs=None): html = u'