У меня есть этот запрос:
plist = UserProfile.objects.filter(q).order_by('-created_at')
Модель:
class UserProfile(models.Model):
user = models.OneToOneField(User)
name = models.CharField(max_length=30, blank=True)
created_at = models.DateTimeField(auto_now_add=True, blank=True)
#some more fields
def last_seen(self):
return cache.get('seen_%s' % self.user.username)
def online(self):
if self.last_seen():
now = datetime.datetime.now()
if now > self.last_seen() + datetime.timedelta(
seconds=settings.USER_ONLINE_TIMEOUT):
return False
else:
return True
Чего я хочу добиться, так это отфильтровать дополнительные plist
, чтобы содержать только онлайн-пользователей.
Я пробовал разные трюки, например:
for p in plist:
if p.online:
print 'profile onlnine \n', p.id
online_plist.append(p)
plist = online_plist
Но это не работает. Так что оцените ваши намеки.
ОБНОВЛЕНИЕ: вот как устанавливается кеш онлайн-пользователей:
class ActiveUserMiddleware:
def process_request(self, request):
current_user = request.user
if request.user.is_authenticated():
now = datetime.datetime.now()
cache.set('seen_%s' % (current_user.username), now,
settings.USER_LASTSEEN_TIMEOUT)