def session_ro(self, obj): url = get_admin_url(obj.session) return format_html('<a href="{url}">{name}</a>', url=url, name=obj.session)
def subject_l(self, obj): url = get_admin_url(obj.subject) return format_html('<a href="{url}">{subject}</a>', subject=obj.subject or '-', url=url)
def session_str(self, obj): url = get_admin_url(obj.session) return format_html('<a href="{url}">{session}</a>', session=obj.session or '-', url=url)
def father_l(self, obj): url = get_admin_url(obj.father) return format_html('<a href="{url}">{name}</a>', name=obj.father.nickname if obj.father else '-', url=url)
def mother2_l(self, obj): url = get_admin_url(obj.mother2) return format_html('<a href="{url}">{name}</a>', name=obj.mother2.nickname if obj.mother2 else '-', url=url)
def line_l(self, obj): url = get_admin_url(obj.line) return format_html('<a href="{url}">{line}</a>', line=obj.line or '-', url=url)
def litter_l(self, obj): url = get_admin_url(obj.litter) return format_html('<a href="{url}">{litter}</a>', litter=obj.litter or '-', url=url)
def breeding_pair_l(self, obj): bp = obj.litter.breeding_pair if obj.litter else None url = get_admin_url(bp) return format_html('<a href="{url}">{breeding_pair}</a>', breeding_pair=bp or '-', url=url)
def line_l(self, obj): # obj is the Subject instance, obj.line is the subject's Line instance. url = get_admin_url(obj.line) # url to the Change line page return format_html('<a href="{url}">{line}</a>', line=obj.line or '-', url=url)
def subjects_l(self, obj): return format_html('; '.join('<a href="{url}">{subject}</a>'.format( subject=subject or '-', url=get_admin_url(subject)) for subject in obj.subjects()))