from .dates import get_cutoff_date def make_read_aware(user, posts): if not posts: return if not hasattr(posts, '__iter__'): posts = [posts] make_read(posts) if user.is_anonymous: return cutoff_date = get_cutoff_date(user) unresolved_posts = {} for post in posts: if post.posted_on > cutoff_date: post.is_read = False post.is_new = True unresolved_posts[post.pk] = post if unresolved_posts: queryset = user.postread_set.filter(post__in=unresolved_posts) for post_id in queryset.values_list('post_id', flat=True): unresolved_posts[post_id].is_read = True unresolved_posts[post_id].is_new = False def make_read(posts): for post in posts: post.is_read = True post.is_new = False def save_read(user, post): user.postread_set.create( category=post.category, thread=post.thread, post=post, )