@Vlad1987
учу Python

Как правильно отбразить счётчик просмотра новости?

Добрый день!

Решил добавить в модель аттрибут счётчика просмотра конкретной новости: views = models.IntegerField(default=0)
И начал соображать как сделать так, чтобы при просмотре конкретной новости, счётчик увеличивался.
Додумался до следующего:

Вьюха DetailView
class 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) , хотя в самой базе данных счётчик меняется.

Подскажите, пожалуйста, как выводить в шаблоне именно число?

Спасибо!
  • Вопрос задан
  • 52 просмотра
Решения вопроса 2
@bacon
А начни-ка читать доки https://docs.djangoproject.com/en/3.1/ref/models/e... там вот прям все и рассказано.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы