Skip to content
Snippets Groups Projects
admin.py 923 B
Newer Older
  • Learn to ignore specific revisions
  • 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))