@@ -153,30 +153,18 @@ def make_grid():
153153 field .readable = True
154154 field .writable = True
155155 # Make reference fields clickable
156- if field .type .startswith ("reference " ) or field .type .startswith ("big-reference " ):
157- referenced_table_name = field .type .split ()[1 ]
158- # Create a custom represent function that returns a clickable link
159- def make_reference_represent (ref_table_name , app_n , db_n ):
160- def represent (value , row ):
161- if not value :
162- return ""
163- ref_table = db [ref_table_name ]
164- ref_row = ref_table (value )
165- if not ref_row :
166- return f"#{ value } (missing)"
167- # Get display text using table format
168- if isinstance (ref_table ._format , str ):
169- display_text = ref_table ._format % ref_row
170- elif callable (ref_table ._format ):
171- display_text = ref_table ._format (ref_row )
172- else :
173- display_text = str (value )
174- # Create link to the referenced record's table
175- link_url = URL ("dbadmin" , app_n , db_n , ref_table_name , vars = dict (id = value ))
176- return XML (f'<a href="{ link_url } ">{ display_text } </a>' )
177- return represent
178- field .represent = make_reference_represent (referenced_table_name , app_name , db_name )
179-
156+ if field .type_name in ("reference" , "big-reference" ):
157+ field .represent = make_admin_reference_represent (
158+ app_name , db_name , db , field
159+ )
160+ elif field .type_name in ("list:reference" ):
161+ representer = make_admin_reference_represent (
162+ app_name , db_name , db , field
163+ )
164+ field .represent = lambda values , _ : [
165+ representer (item , _ ) for item in values
166+ ]
167+
180168 columns = [
181169 field
182170 for field in table
0 commit comments