Allow user provided display function, so that we can do something like this:
from django.urls import reverse
from django.utils.html import format_html_join
from tagulous.constants import COMMA, DOUBLE_QUOTE, QUOTE, SPACE
def _my_create_display(field_name):
def display(self, obj):
field = getattr(obj, field_name)
names = []
for tag in field.tags:
name = str(tag)
name = name.replace(QUOTE, DOUBLE_QUOTE)
if COMMA in name or SPACE in name:
names.append("%s" % name)
else:
names.append(name)
return format_html_join(
", ",
'<a href="{}">{}</a>',
(
(reverse("admin:%s_%s_change" % (
field.model._meta.app_label,
field.tag_model.__name__.lower()
), args=(tag.id,)), name)
for name, tag in zip(names, field.tags)
)
)
display.short_description = field_name.replace("_", " ")
return display
class MyModel(models.Model):
tags = tagulous.models.TagField(blank=True)
class MyAdmin(tagulous.admin.TaggedModelAdmin):
list_display = ['tags']
tagulous.admin.enhance(MyModel, MyAdmin, display_func=_my_create_display)
admin.site.register(MyModel, MyAdmin)
This produces a nice list of tags in the list_display, where each tag links to the change view of that specific tag in the admin:
Allow user provided display function, so that we can do something like this:
This produces a nice list of tags in the list_display, where each tag links to the change view of that specific tag in the admin: