Using tags in the admin¶
By default if you have a TaggableManager
on your model it will show up
in the admin, just as it will in any other form.
If you are specifying ModelAdmin.fieldsets
, include the name
of the TaggableManager
as a field:
fieldsets = (
(None, {'fields': ('tags')}),
)
Including tags in ModelAdmin.list_display
¶
One important thing to note is that you cannot include a TaggableManager
in ModelAdmin.list_display
. If you do you’ll see an exception that looks
like:
AttributeError: '_TaggableManager' object has no attribute 'name'
This is for the same reason that you cannot include a ManyToManyField
:
it would result in an unreasonable number of queries being executed.
If you want to show tags in ModelAdmin.list_display
, you can add a
custom display method to the ModelAdmin
, using prefetch_related
to
minimize queries:
class MyModelAdmin(admin.ModelAdmin):
list_display = ['tag_list']
def get_queryset(self, request):
return super(MyModelAdmin, self).get_queryset(request).prefetch_related('tags')
def tag_list(self, obj):
return u", ".join(o.name for o in obj.tags.all())
For details, see the Django documentation.