def register(self, lookup): self.validate(lookup) name = force_text(lookup.name()) if name in self._registry: raise LookupAlreadyRegistered('The name %s is already registered' % name) self._registry[name] = lookup
def render(self, name, value, attrs=None, choices=()): lookup = self.lookup_class() if value is None: value = [] final_attrs = self.build_attrs(attrs, type=self.input_type, name=name) id_ = final_attrs.get('id', None) inputs = [] model = getattr(self.lookup_class, 'model', None) for i, v in enumerate(value): item = None if model and isinstance(v, model): item = v v = lookup.get_item_id(item) input_attrs = dict(value=force_text(v), **final_attrs) if id_: # An ID attribute was given. Add a numeric index as a suffix # so that the inputs don't all have the same ID attribute. input_attrs['id'] = '%s_%s' % (id_, i) if v: item = item or lookup.get_item(v) input_attrs['title'] = lookup.get_item_value(item) inputs.append('<input%s />' % flatatt(input_attrs)) return mark_safe('\n'.join(inputs))
def unregister(self, lookup): self.validate(lookup) name = force_text(lookup.name()) if name not in self._registry: raise LookupNotRegistered('The name %s is not registered' % name) del self._registry[name]