Django:没有'for loop'删除多个会话

时间:2014-09-21 11:37:27

标签: django session

通常,我删除了多个会话到' for loop '。

我想更改为'使用过滤器删除查询'以加快,如下面的示例代码。

但是,我不知道如何解决这个问题。


[案例1 ] - 效果很好

from django.contrib.sessions.models import Session 
from datetime import datetime

def clear_expired_sessions():
    for s in Session.objects.all():
        if s.expire_date < datetime.now():
            s.delete()

[更新查询的案例1 ] - 无法正常工作

from django.contrib.sessions.models import Session 
from datetime import datetime

def clear_expired_sessions():
    Session.objects.filter(expire_date<datetime.now()).delete()

产生NameError: name 'expire_date' is not defined


[案例2 ] - 效果很好

from django.contrib.sessions.models import Session 
from accounts.models import UserProfile

def delete_specific_session():
    user = UserProfile.objects.get(username="Tim")

    for s in Session.objects.all():
        if s.get_decoded().get('_auth_user_id') == user.id:
            s.delete()

[案例2及更新查询] - 无法正常工作

from django.contrib.sessions.models import Session 
from accounts.models import UserProfile

def delete_specific_session():
    user = UserProfile.objects.get(username="Tim")

    Session.objects.filter(????=user.id).delete()

在这种情况下,什么应该替代???=user.id

1 个答案:

答案 0 :(得分:2)

尝试1失败的原因是基本的Django查询语法:您必须使用__lt进行比较:

Session.objects.filter(expire_date__lt=datetime.now()).delete()

尝试2永远不会起作用,因为会话模型与用户模型没有任何关系。