Добрый день!
Решил добавить в модель аттрибут счётчика просмотра конкретной новости:
views = models.IntegerField(default=0)
И начал соображать как сделать так, чтобы при просмотре конкретной новости, счётчик увеличивался.
Додумался до следующего:
Вьюха DetailViewclass ViewNews(DetailView):
model = News
context_object_name = 'news_item'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['unwanted_link'] = 'news/news_detail.html'
context['news_item'].views += 1
context['news_item'].save()
return context
т.е. вот он мой аттрибут
context['news_item'].views += 1
увеличивается каждый раз при просмотре конкретной новости. И это в прицнипе работает.
Но затем я где-то вычитал, что данный способ может работать некорректно в режим многих потоков.
Я пока с этим не знаком, но я так понимаю что речь идёт о множественных одновременных запросах к серверу.
И предлагается использовать способ с функцией F.
Я переделал и получилось
context['news_item'].views = F('views') + 1
Но вся проблема в том, что в шаблоне новости, когда я вывожу эту переменную как {{ news_item.views }} , то у меня отображается
F(views) + Value(1)
, хотя в самой базе данных счётчик меняется.
Подскажите, пожалуйста, как выводить в шаблоне именно число?
Спасибо!