import django_tables2 as tables from django_tables2.utils import A from .models import Long, LongSeries, UserAnswer from django.utils.html import format_html from easy_thumbnails.files import get_thumbnailer from easy_thumbnails.exceptions import InvalidImageFormatError class LongImageColumn(tables.Column): def render(self, value): blocks =[] for obj in value.all(): blocks.append(obj.get_block()) return format_html("{}".format("".join(blocks))) obj = value.first() if obj is None: return format_html("No image") return obj.get_thumbnail()[0] # 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 LongSeriesImageColumn(tables.Column): def render(self, value): obj = value.all() if not obj: return "None" image_object = obj[0].image try: thumbnailer = get_thumbnailer(image_object) return format_html('
[{}]', thumbnailer["exam-list"], value.count()) except InvalidImageFormatError: return format_html('Invalid image url
[{}]', image_object, value.count()) class LongTable(tables.Table): edit = tables.LinkColumn( "longs:long_update", text="Edit", args=[A("pk")], orderable=False ) view = tables.LinkColumn( "longs:question_detail", text="View", args=[A("pk")], orderable=False ) clone = tables.LinkColumn( "longs:long_clone", text="Clone", args=[A("pk")], orderable=False ) delete = tables.LinkColumn( "longs:long_delete", text="Delete", args=[A("pk")], orderable=False ) series = LongImageColumn("Images", orderable=False) #series = tables.ManyToManyColumn(verbose_name="Exams") exams = tables.ManyToManyColumn(verbose_name="Exams") selection = tables.CheckBoxColumn(accessor="pk", orderable=False) class Meta: model = Long template_name = "django_tables2/bootstrap4.html" fields = ("description", "history", "created_date", "author") sequence = ("view", "series", "exams") def __init__(self, data=None, *args, **kwargs): super().__init__( data.prefetch_related( "series", "author", "exams", "series__images", "series__examination", "series__plane", "series__contrast" ), *args, **kwargs, ) class PopupLinkColumn(tables.Column): def render(self, value): return format_html("test: {}", value) obj = value.first() if obj is None: return format_html("No image") return obj.get_thumbnail()[0] class LongSeriesTable(tables.Table): edit = tables.LinkColumn( "longs:long_series_update", text="Edit", args=[A("pk")], orderable=False ) view = tables.LinkColumn( "longs:long_series_detail", text="View", args=[A("pk")], orderable=False ) popup = tables.Column(empty_values=(), orderable=False) images = LongSeriesImageColumn("Images", orderable=False) delete = tables.LinkColumn( "longs:long_series_delete", text="Delete", args=[A("pk")], orderable=False ) selection = tables.CheckBoxColumn(accessor="pk", orderable=False) long = tables.ManyToManyColumn(verbose_name="Question") class Meta: model = LongSeries template_name = "django_tables2/bootstrap4.html" fields = ("modality", "examination", "description", "author") sequence = ("view", "popup", "images", "long") def __init__(self, data=None, *args, **kwargs): super().__init__( data.prefetch_related( "long", "long__series", "images", "author", "examination", "plane", "contrast", "modality" ), *args, **kwargs, ) def render_popup(self, value, record): print(self) return format_html("""Popup""", record.pk) class UserAnswerTable(tables.Table): select = tables.CheckBoxColumn(accessor=("pk")) delete = tables.LinkColumn( "longs:user_answer_delete", text="Delete", args=[A("pk")], orderable=False ) view = tables.LinkColumn('longs:user_answer_view', text='View', args=[A('pk')], orderable=False) class Meta: model = UserAnswer template_name = "django_tables2/bootstrap4.html" fields = ( "cid", "question", "score", #"normal", #"answer", #"answer_compare", "exam", "created", "updated", )