2017-02-05 5 views
0

Я ищу способ разместить объекты модели Django в список, а затем сохранить это в сеансе. Я узнал, что он требует сериализации, прежде чем он может быть сохранен в сеансе. Поэтому, читая список из сеанса, я сначала сериализую его.Как я могу хранить и читать Python-список объектов модели 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 

ответ

1

Я бы не сериализовать сами модели экземпляров. Просто напишите первичные ключи на сеанс, что легко и не требует сериализации. Затем вы можете получить запрос из базы данных в одном запросе и не беспокоиться об измененных данных, отсутствующих экземплярах и т. П.

request.session['player_ids'] = list(players.values_list('pk', flat=True)) 

players = Player.objects.filter(pk__in=request.session.get('player_ids', [])) 

Если Player экземпляры еще не сохранены в базе данных, возможно, придется идти своим путем. Затем вы получаете фактический экземпляр модели из DeserializedObject через атрибут .object.

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

См. docs по десериализации.

+0

Спасибо, ваш ввод полезен, и я действительно могу пойти в конечном итоге. На этом этапе я действительно не планировал хранить эти списки в базе данных. Я попытался добавить .объект, и он работает! Большое спасибо ! –