diff --git a/superset/connectors/base/models.py b/superset/connectors/base/models.py index 39cc5853d6f..958bea00e4d 100644 --- a/superset/connectors/base/models.py +++ b/superset/connectors/base/models.py @@ -86,7 +86,7 @@ class BaseDatasource(AuditMixinNullable, ImportMixin): @property def column_names(self): - return sorted([c.column_name for c in self.columns]) + return sorted([c.column_name for c in self.columns], key=lambda x: x or '') @property def columns_types(self): @@ -166,7 +166,9 @@ class BaseDatasource(AuditMixinNullable, ImportMixin): def data(self): """Data representation of the datasource sent to the frontend""" order_by_choices = [] - for s in sorted(self.column_names): + # self.column_names return sorted column_names + for s in self.column_names: + s = str(s or '') order_by_choices.append((json.dumps([s, True]), s + ' [asc]')) order_by_choices.append((json.dumps([s, False]), s + ' [desc]')) diff --git a/superset/connectors/druid/models.py b/superset/connectors/druid/models.py index 3b22ade1df3..144d4001876 100644 --- a/superset/connectors/druid/models.py +++ b/superset/connectors/druid/models.py @@ -280,7 +280,7 @@ class DruidColumn(Model, BaseColumn): export_parent = 'datasource' def __repr__(self): - return self.column_name + return self.column_name or str(self.id) @property def expression(self):