【问题标题】:how can I store and read a Python list of Django model objects from and to the session?如何在会话中存储和读取 Django 模型对象的 Python 列表?
【发布时间】:2017-02-06 01:20:58
【问题描述】:

我正在寻找一种将 Django 模型对象放入列表然后将其存储在会话中的方法。我发现它需要序列化才能存储在会话中。因此,当从会话中读取列表时,我首先对其进行序列化。

但后来我希望能够像以前一样访问我的初始对象,但结果却是一个 DeserializedObject。

有人知道我应该如何满足我的要求吗? 简而言之,这是我尝试的代码,但没有成功

team1_list = generate_random_playerlist() #generates a list of Player() objects
request.session['proposed_team_1'] = serializers.serialize('json', team1_list)

#some code inbetween

des_list = serializers.deserialize('json', request.session['proposed_team_1'])
for player in des_list : 
    print("name of player:"+player.last_name) #fails

【问题讨论】:

    标签: python django list session serialization


    【解决方案1】:

    我不会序列化模型实例本身。只需将他们的主键写入会话,这很容易并且不需要序列化。然后,您可以在单个查询中从数据库中检索查询集,而不必担心数据更改、缺少实例等。

    request.session['player_ids'] = list(players.values_list('pk', flat=True))
    
    players = Player.objects.filter(pk__in=request.session.get('player_ids', []))
    

    如果您的 Player 实例尚未保存到数据库中,您可能必须按照自己的方式行事。然后通过.object 属性从DeserializedObject 获取实际模型实例。

    for player in des_list : 
        print("name of player:" + player.object.last_name)
    

    请参阅docs 了解反序列化。

    【讨论】:

    • 谢谢,您的意见很有用,我确实可能最终会这样做。在这个阶段,我确实不打算将这些列表存储在数据库中。我尝试添加 .object 并且它有效!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-26
    • 1970-01-01
    • 2015-01-20
    • 2013-08-18
    • 1970-01-01
    • 2011-03-26
    • 2019-10-22
    相关资源
    最近更新 更多