Newer
Older
from django.utils.html import mark_safe
class ListRelatedMixin:
"""Provides a used_by column which can be found by defining related models in the
following format:
related_models = [
(<related_name>, <field_name>),
]
e.g. This would be object.<related_name>_set.field
"""
def get_queryset(self, request):
qs = super().get_queryset(request)
related = [f'{form}_set__{field}' for form, field in self.related_models]
return qs.prefetch_related(*related)
def _list_related(self, obj, form, field):
return ', '.join(getattr(obj, f'{form}_set').values_list(f'{field}__title', flat=True))
def used_by(self, obj):
rows = list()
for form, field in self.related_models:
related = self._list_related(obj, form, field)
if related:
rows.append(related)
return mark_safe('<br>'.join(rows))