Ну, это нормальное поведение, потому что last_login
хранит дату и время, когда пользователь последний раз входил в систему. Когда пользователь заново входит в систему, он сохраняет текущее время (timezone.now).Таким образом, если сообщение создано до того, как он вошел в систему, оно не появится в new_posts
.Поэтому, если вы хотите сохранить предыдущее время входа / выхода, вам нужно сохранить его где-то еще (или создать новое поле модели).Вы можете попробовать вот так, используя сигнал пользователя, вышедшего из системы :
from django.contrib.auth.signals import user_logged_out
def do_stuff(sender, user, request, **kwargs):
user.logout_time = timezone.now()
user.save()
user_logged_out.connect(do_stuff) # Hook an a method to user_logged_out signal to update logout time
И использовать его в представлении следующим образом:
last_post = Post.objects.last()
if last_post.created_at < request.user.last_login:
new_posts = Post.objects.filter(created_at__gt=self.request.user.logout_time).count()
context['new_posts'] = new_posts
Обновление
В этом примере необходимо иметь поле для хранения времени выхода из системы.Если у вас есть CustomUser , вы можете напрямую создать его в модели CustomUser.Иначе, вы можете добавить его следующим образом:
class Profile(models.Model):
user = models.OneToOneField(User)
logout_time = models.DateTimeField(default=timezone.now)
и сохранить время выхода из системы следующим образом:
user.profile.logout_time = timezone.now()
и отфильтровать новые сообщения следующим образом:
new_posts = Post.objects.filter(created_at__gt=self.request.user.profile.logout_time)