@@ -372,21 +372,24 @@ def maybe_call(obj, *args, **kwargs):
372372 return obj (* args , ** kwargs )
373373
374374
375- def reference_represent (value ):
375+ def reference_represent (field , value ):
376376 """
377377 Assumes value is a pydal.objects.Reference value and represts is using the
378378 table._format of the referenced table
379379 """
380- table = value ._table
380+ if not value :
381+ return ""
382+ table = field .referenced_table ()
383+ if not table :
384+ return "#{value}"
381385 row = table (value )
382386 if not row :
383- return ""
387+ return "#{value}(missing) "
384388 if isinstance (table ._format , str ):
385389 return table ._format % row
386390 elif callable (table ._format ):
387391 return table ._format (row )
388- else :
389- return str (value )
392+ return str (value )
390393
391394
392395def datetime_represent (value ):
@@ -432,17 +435,20 @@ def time_represent(value):
432435
433436class Grid :
434437 represent_by_type = {
435- "id" : lambda value : f"#{ value } " ,
436- "boolean" : lambda value : "☑" if value else "☐" if value is False else "" ,
437- "float" : lambda value : "%.2f" % value ,
438- "double" : lambda value : "%.2f" % value ,
439- "decimal" : lambda value : "%.2f" % value ,
438+ "id" : lambda field , value : f"#{ value } " ,
439+ "boolean" : lambda field , value : "☑" if value else "☐" if value is False else "" ,
440+ "integer" : lambda field , value : str (value ) if value is not None else "" ,
441+ "bigint" : lambda field , value : str (value ) if value is not None else "" ,
442+ "float" : lambda field , value : "%.2f" % value if value is not None else "" ,
443+ "double" : lambda field , value : "%.2f" % value if value is not None else "" ,
444+ "decimal" : lambda field , value : "%.2f" % value if value is not None else "" ,
440445 "reference" : reference_represent ,
441- "datetime" : datetime_represent ,
442- "date" : date_represent ,
443- "time" : time_represent ,
444- "list" : lambda value : ", " .join (str (x ) for x in value ) or "" ,
445- "password" : lambda value : "******" ,
446+ "big-reference" : reference_represent ,
447+ "datetime" : lambda field , value : datetime_represent (value ),
448+ "date" : lambda field , value : date_represent (value ),
449+ "time" : lambda field , value : time_represent (value ),
450+ "list" : lambda field , value : ", " .join (str (x ) for x in value ) or "" ,
451+ "password" : lambda field , value : "******" ,
446452 }
447453
448454 def __init__ (
@@ -775,16 +781,16 @@ def col2key(col):
775781 and A ("download" , _href = f (row [name ]))
776782 or ""
777783 )
778- # field represent override default formatters by type
784+ # field represent override default representation by type
779785 elif col .represent :
780786 represent_col = lambda row , name = str (col ), f = col .represent : f (
781787 row [name ], row
782788 )
783- # we do not know better, use formatters by type (type is the stripped Field type)
789+ # we do not know better, use formarepresent by type (type is the stripped Field type)
784790 elif type_name in self .represent_by_type :
785- represent_col = lambda row , name = str ( col ) , f = self .represent_by_type [
786- type_name
787- ]: f (row [name ])
791+ represent_col = lambda row , col = col , f = self .represent_by_type [
792+ col . type_name
793+ ]: f (col , row [str ( col ) ])
788794 else :
789795 represent_col = lambda row , name = str (col ): row [name ]
790796
0 commit comments