Вам нужно установить какое-то «Доказательство чтения» где-нибудь. Один из способов сделать это - добавить M2M между NewsItem
и User
моделью.
Как только пользователь нажимает «Пометить как прочитанное», вы делаете что-то вроде NewsItem.users.add(request.user)
, и выможете фильтровать ваш NewsItem
в вашем index
представлении.
class NewsItem(models.Model):
url = models.CharField(max_length=500, default="",unique=True)
title = models.CharField(max_length=500, default="")
hacker_news_url = models.CharField(max_length=500, default="")
posted_on = models.DateTimeField(default=datetime.now)
upvote_count = models.IntegerField(default=0)
comment_count = models.IntegerField(default=0)
users = models.ManyToManyField('your-user-model', verbose_name="Readers", related_name="reads")
После 'makemigrations / migrate', в ваших представлениях:
@login_required(login_url='/accounts/login')$
def index(request):
news = NewsItem.objects.exclude(users=request.user).order_by('posted_on')
context={'news_items':news}
return render(request, "hello.html", context)
@login_required(login_url='/accounts/login')
@require_http_methods(['POST'])
def read(request, news_item_pk):
"""
This is the most basic example.
If you use AJAX Calls, Do not forget to add your CSFR;
"""
news = get_object_or_404(NewsItem, pk=news_item_pk)
news.users.add(request.user)
return HttpResponse()
Наконец, в ваших представлениях вы должны добавитьваш read
просмотр