【问题标题】:adding a list of menu items in a django session在 Django 会话中添加菜单项列表
【发布时间】:2017-01-29 23:26:35
【问题描述】:

我在对象列表中有用户菜单,我想把它放到 django 会话中。我正在尝试,但 django 告诉我

'list' object has no attribute '_meta'

实际上这是代表菜单中一个项目的对象

class MenuItem(object):
    def __init__(self, id, name, link, items=None):
        self.id = id
        self.name = name
        self.link = link
        self.items = items

在一个函数中,我将 MenuItems 附加到一个列表中。

menu = []
menu.append(MenuItem(1,
                     "hi",
                     "some_link"))

最后在视图中,我尝试将菜单置于会话中。

request.session['menu'] = menu

这部分是 django 抛出一个

'list' 对象没有属性 '_meta' 错误。

【问题讨论】:

    标签: python django session menu


    【解决方案1】:

    这是因为您尝试存储在会话中的对象不可序列化。

    你可以用 with 测试

    import json
    json.dumps(MenuItem(1, "hi", "some_link"))
    

    这给了

    MenuItem object at ... is not JSON serializable
    

    您可以做的一件事是编写自己的函数来序列化对象。这是处理它的一种方法:

    class MenuItem(object):
        def __init__(self, id, name, link, items=None):
            self.id = id
            self.name = name
            self.link = link
            self.items = items
    
        def serialize(self):
            return self.__dict__
    

    那么,

    menu = []
    menu.append(MenuItem(1, "hi", "some_link").serialize())
    request.session["menu"] = menu
    

    【讨论】:

      猜你喜欢
      • 2023-02-16
      • 1970-01-01
      • 1970-01-01
      • 2019-04-19
      • 2021-10-25
      • 2013-05-01
      • 1970-01-01
      • 2013-12-30
      • 1970-01-01
      相关资源
      最近更新 更多