Skip to content

Commit def3c7a

Browse files
committed
Add field "created_at" to Session model
1 parent 81fcee1 commit def3c7a

File tree

4 files changed

+18
-7
lines changed

4 files changed

+18
-7
lines changed

qsessions/admin.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,13 @@ def delete_selected(modeladmin, request, queryset):
4949

5050
@admin.register(Session)
5151
class SessionAdmin(admin.ModelAdmin):
52-
list_display = ('ip', 'user', 'is_valid', 'expire_date', 'device', 'location')
52+
list_display = ('ip', 'user', 'is_valid', 'created_at', 'expire_date', 'device', 'location')
5353
readonly_fields = ('ip', 'location', 'user', 'user_agent', 'is_valid', 'expire_date',
54-
'updated_at', 'user_agent', 'device', 'session_key', 'session_data_decoded')
54+
'created_at', 'updated_at', 'user_agent', 'device', 'session_key',
55+
'session_data_decoded')
5556
list_filter = ExpiredFilter, OwnerFilter
56-
fields = ('user', 'ip', 'location', 'is_valid', 'expire_date', 'updated_at', 'user_agent',
57-
'device', 'session_key', 'session_data_decoded')
57+
fields = ('user', 'ip', 'location', 'is_valid', 'created_at', 'updated_at', 'expire_date',
58+
'user_agent', 'device', 'session_key', 'session_data_decoded')
5859
ordering = ('-expire_date', )
5960
actions = [delete_selected]
6061

qsessions/migrations/0001_initial.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# -*- coding: utf-8 -*-
2-
# Generated by Django 1.11.2 on 2017-12-19 16:00
2+
# Generated by Django 1.11.2 on 2018-02-03 11:04
33
from __future__ import unicode_literals
44

55
from django.conf import settings
@@ -24,6 +24,7 @@ class Migration(migrations.Migration):
2424
('session_data', models.TextField(verbose_name='session data')),
2525
('expire_date', models.DateTimeField(db_index=True, verbose_name='expire date')),
2626
('user_agent', models.CharField(blank=True, max_length=300, null=True)),
27+
('created_at', models.DateTimeField()),
2728
('updated_at', models.DateTimeField(auto_now=True)),
2829
('ip', models.GenericIPAddressField(blank=True, null=True, verbose_name='IP')),
2930
('user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),

qsessions/models.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from django.contrib.sessions.base_session import AbstractBaseSession, BaseSessionManager
22
from django.utils.translation import ugettext_lazy as _
3+
from django.utils import timezone
34
from django.conf import settings
45
from django.db import models
56

@@ -19,7 +20,7 @@ class Session(AbstractBaseSession):
1920
user = models.ForeignKey(getattr(settings, 'AUTH_USER_MODEL', 'auth.User'),
2021
null=True, on_delete=models.CASCADE)
2122
user_agent = models.CharField(null=True, blank=True, max_length=300)
22-
# created_at = models.DateTimeField(null=True, auto_now_add=True)
23+
created_at = models.DateTimeField()
2324
updated_at = models.DateTimeField(auto_now=True)
2425
ip = models.GenericIPAddressField(null=True, blank=True, verbose_name=_('IP'))
2526

@@ -30,6 +31,14 @@ def get_session_store_class(cls):
3031
from qsessions.backends.cached_db import SessionStore
3132
return SessionStore
3233

34+
def save(self, *args, **kwargs):
35+
# https://code.djangoproject.com/ticket/17654
36+
try:
37+
self.created_at = Session.objects.get(pk=self.pk).created_at
38+
except Session.DoesNotExist:
39+
self.created_at = timezone.now()
40+
super(Session, self).save(*args, **kwargs)
41+
3342
def delete(self, *args, **kwargs):
3443
"""
3544
Delete session from both DB and cache (first DB, then cache)

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
setup(
1111
name='django-qsessions',
12-
version='0.1.2',
12+
version='0.1.3',
1313
description='Extends Django\'s cached_db session backend',
1414
long_description=README,
1515
author='Mohammad Javad Naderi',

0 commit comments

Comments
 (0)