2016-09-21 13 views
0

私はオブジェクトリストにユーザーメニューを持っており、これをdjango sesionに入れたいと思います。私がしようとしましたが、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 

と私はリストでのMenuItemを追加機能での項目を表すオブジェクトである私に語りました。

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

最後に、セッション中にメニューを表示しようとしています。

request.session['menu'] = menu 

そして、この部分のDjangoがスローした場合

'リスト' オブジェクトには属性 '_meta' エラーを持っていません。

答えて

1

これは、セッションに保存しようとしているオブジェクトがシリアル化されていないために発生しています。

あなたが行うことができます

MenuItem object at ... is not JSON serializable 

一つのことは、オブジェクトをシリアル化するために、独自の関数を記述で与え

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

にしてテストすることができます。その後

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 
+0

は、あなたに感謝:ここではそれに近づくための一つの方法です。 –

関連する問題