Мне удалось понять это.django кодирует данные для сохранения в базе данных и декодирует перед помещением их в объект запроса.
@receiver(signals.pre_save, sender=Session, dispatch_uid='session_pre_save')
def session_pre_save(sender, **kwargs):
s = kwargs['instance']
data = s.get_decoded()
if 'start' not in data:
data['start'] = datetime.now()
s.session_data = Session.objects.encode(data)
однако django не сохраняет эти сеансы до тех пор, пока что-то там не будет.так что вы можете получить разные ключи сессии при каждой загрузке страницы, если ничего не читается / не записывается.так что в итоге я создал промежуточное программное обеспечение:
class SessionInitMiddleware:
""" middleware that initialises session """
def process_view(self, request, view_func, view_args, view_kwargs):
session_start = request.session.get('start', "")
if session_start == "":
request.session['start'] = datetime.now()
request.session.save()