【问题标题】:cherrypy + sqlalchemy + sqlalchemy-datatables: unhashable type: dictcherrypy + sqlalchemy + sqlalchemy-datatables:不可散列类型:dict
【发布时间】:2018-11-17 07:23:44
【问题描述】:

我正在尝试将 jQuery 数据表服务器端处理与cherrypy 和 sqlalchemy 集成,我收到一个关于“不可散列类型:'dict'”的错误。

我写的代码是这样的:

@cherrypy.tools.json_out()
def GET(self, *args, **kwargs):
    with GetDb().ScopedSession("Fetching detail for main page") as session:
        # defining columns
        columns = [
            ColumnDT(dbModels.DatabaseModel.Field1),
            ColumnDT(dbModels.DatabaseModel.Field2),
            # ...
        ]

        query = session.query(dbModels.DatabaseModel)

        # GET parameters
        params = kwargs  # I think this is what's causing the issue.

        print("==========================")
        print(params)
        print("==========================")

        # instantiating a DataTable for the query and table needed
        rowTable = DataTables(params, query, columns)

        # returns what is needed by DataTable
        result = rowTable.output_result()
        print("==========================")
        print(result)
        print("==========================")
        return result

'params' 打印的结果如下所示(有些截断):

{'draw': '1', 'columns[0][data]': '', 'columns[0][name]': '', 'columns[0][searchable]': 'true' } 

结果输出如下:

{'draw': '1', 'recordsTotal': '125', 'recordsFiltered': '125', 'error': "unhashable type: 'dict'"}

我怀疑 DataTables() 调用不喜欢类似 'jsonpath' 的 GET 参数(参见上面的“#我认为这是导致问题的原因”部分),所以我很好奇是否有我可以让cherrypy将**kwargs作为嵌套键/值对返回,或者将kwargs转换为嵌套字典的函数——或者,如果我完全错了,这完全是一个不同的错误。 :)

谢谢!

如果有帮助,请提供更多数据:

网页渲染显示警告说:

DataTables warning: table id=active-jobs - unhashable type: 'dict'

单击“确定”会在数据表代码中产生类型错误:

datatables.min.js:52 Uncaught TypeError: Cannot read property 'length' of undefined
    at vb (datatables.min.js:52)
    at datatables.min.js:49
    at i (datatables.min.js:47)
    at Object.success (datatables.min.js:48)
    at fire (jquery-3.3.1.js:3268)
    at Object.fireWith [as resolveWith] (jquery-3.3.1.js:3398)
    at done (jquery-3.3.1.js:9305)
    at XMLHttpRequest.<anonymous> (jquery-3.3.1.js:9548)
vb @ datatables.min.js:52
(anonymous) @ datatables.min.js:49
i @ datatables.min.js:47
success @ datatables.min.js:48
fire @ jquery-3.3.1.js:3268
fireWith @ jquery-3.3.1.js:3398
done @ jquery-3.3.1.js:9305
(anonymous) @ jquery-3.3.1.js:9548
load (async)
send @ jquery-3.3.1.js:9567
ajax @ jquery-3.3.1.js:9206
sa @ datatables.min.js:48
lb @ datatables.min.js:49
P @ datatables.min.js:41
T @ datatables.min.js:43
ha @ datatables.min.js:60
e @ datatables.min.js:105
(anonymous) @ datatables.min.js:105
each @ jquery-3.3.1.js:354
each @ jquery-3.3.1.js:189
n @ datatables.min.js:95
h.fn.DataTable @ datatables.min.js:177
RebuildTable @ (index):128
(anonymous) @ (index):266
mightThrow @ jquery-3.3.1.js:3534
process @ jquery-3.3.1.js:3602
setTimeout (async)
(anonymous) @ jquery-3.3.1.js:3640
fire @ jquery-3.3.1.js:3268
fireWith @ jquery-3.3.1.js:3398
fire @ jquery-3.3.1.js:3406
fire @ jquery-3.3.1.js:3268
fireWith @ jquery-3.3.1.js:3398
ready @ jquery-3.3.1.js:3878
completed @ jquery-3.3.1.js:3888

【问题讨论】:

  • 如果有的话,请提供完整的回溯。
  • 没有。这也不例外,“不可散列的类型:'dict'”来自 rowTable.output_result()。
  • 好吧,经过进一步思考,javascript 导致了堆栈跟踪;所以我会把它添加到描述中以防万一。

标签: python datatables sqlalchemy


【解决方案1】:

我终于想通了。我的一列是来自 sqlalchemy_utils 的“JSONType”类型,而 sqlalchemy-datatables 类没有处理它正在为 JSON 数据获取“dict”。

我解决了这个问题 - 无论好坏 - 通过不在我的列中包含它,而是有一个手工制作的列,我用我需要的详细信息填充了一个对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 2020-06-26
    • 2017-10-28
    • 2012-10-27
    • 2015-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多