+ def metadata_rows(self):
+ return '\n'.join(
+ '<dc:%(name)s>%(value)s</dc:%(name)s>' % {'name': tag.category.dc_tag, 'value': tag.dc_value}
+ for tag in self.cleaned_tags())
+
+
+class TagSelect(forms.Select):
+ def render_option(self, selected_choices, option_value, option_label):
+ if option_value is None:
+ option_value = ''
+ help_html = ''
+ if option_value:
+ tag = Tag.objects.get(id=int(option_value))
+ if tag.help_text:
+ help_html = mark_safe(' data-help="%s"' % tag.help_text)
+ option_value = force_text(option_value)
+ if option_value in selected_choices:
+ selected_html = mark_safe(' selected="selected"')
+ if not self.allow_multiple_selected:
+ # Only allow for a single selection.
+ selected_choices.remove(option_value)
+ else:
+ selected_html = ''
+ return format_html(
+ u'<option value="{}"{}{}>{}</option>',
+ option_value, selected_html, help_html, force_text(option_label))
+