import django_tables2 as tables from django_tables2.utils import A from .models import Rapid, CidUserAnswer from django.utils.html import format_html from easy_thumbnails.files import get_thumbnailer from easy_thumbnails.exceptions import InvalidImageFormatError class ImageColumn(tables.Column): def render(self, value): obj = value.first() if obj is None: return format_html('No image') image_object = obj.image try: thumbnailer = get_thumbnailer(image_object) return format_html('', thumbnailer["exam-list"]) except InvalidImageFormatError: return format_html('Invalid image url', image_object) class RapidTable(tables.Table): edit = tables.LinkColumn('rapids:rapid_update', text='Edit', args=[A('pk')], orderable=False) view = tables.LinkColumn('rapids:question_detail', text='View', args=[A('pk')], orderable=False) clone = tables.LinkColumn('rapids:rapid_clone', text='Clone', args=[A('pk')], orderable=False) delete = tables.LinkColumn('rapids:question_delete', text='Delete', args=[A('pk')], orderable=False) images = ImageColumn("images", orderable=False) exams = tables.ManyToManyColumn(verbose_name="Exams") selection = tables.CheckBoxColumn(accessor="pk", orderable=False) class Meta: model = Rapid template_name = "django_tables2/bootstrap4.html" fields = ("normal", "abnormality", "region", "examination", "laterality", #"site", "created_date", "open_access", "author") sequence = ("view", "images", "exams") def __init__(self, data=None, *args, **kwargs): super().__init__( data.prefetch_related( "abnormality", "region", "examination", "images", "exams", "author" ), *args, **kwargs, ) class RapidUserAnswerTable(tables.Table): select = tables.CheckBoxColumn(accessor=("pk")) delete = tables.LinkColumn( "rapids:user_answer_delete", text="Delete", args=[A("pk")], orderable=False ) view = tables.LinkColumn('rapids:user_answer_view', text='View', args=[A('pk')], orderable=False) class Meta: model = CidUserAnswer template_name = "django_tables2/bootstrap4.html" fields = ( "cid", "user", "question", "normal", "answer", #"answer_compare", "exam", "created", "updated", ) def __init__(self, data=None, *args, **kwargs): super().__init__( data.prefetch_related( "exam", "question" ), *args, **kwargs, )