Значение объекта класса не отображается должным образом - PullRequest
1 голос
/ 19 сентября 2019

Я реализовал счетчик в моей программе Django.Он не отображается должным образом.

Из представлений

    class PostDetail(DetailView):
    model = Post


    def get_context_data(self, **kwargs):
        data = super(PostDetail, self).get_context_data(**kwargs)
        self.object.view_count = F('view_count') + 1
        self.object.save()
        return data

Я знаю, что это работает, потому что, если я закомментирую метод

Со страницы HTML

    <small class="text-muted">{{ object.view_count }}</small>

Однако, когда я пытаюсь использовать метод, который он печатает,

    F(view_count) + Value(1)

Вместо числа, как предполагалось.

Я не уверен, что еще можно попробовать, поскольку я новичок в Django.Я попытался выяснить, как это исправить, но ничего не смог найти.

Ответы [ 2 ]

0 голосов
/ 19 сентября 2019

Вы можете просто увеличить view_count, поэтому self.object.view_count += 1.Выше приведено немного меньше сохранения, поскольку здесь, если один и тот же Post показан дважды одновременно, вполне возможно, что одно из представлений не будет принято во внимание, однако, вероятно, view_count не так важно:

class PostDetail(DetailView):
    model = Post


    def get_context_data(self, **kwargs):
        data = super(PostDetail, self).get_context_data(**kwargs)
        <b>self.object.view_count += 1</b>
        self.object.save()
        return data

Если вы действительно хотите защитить это от условий гонки, вы можете сохранить view_count, а затем сделать сохранение с помощью F('view_count') + 1:

class PostDetail(DetailView):
    model = Post


    def get_context_data(self, **kwargs):
        data = super(PostDetail, self).get_context_data(**kwargs)
        <b>vc = self.object.view_count</b>
        self.object.view_count = F('view_count') + 1
        self.object.save()
        self.object.view_count = <b>vc + 1</b>
        return data
0 голосов
/ 19 сентября 2019

Возможно, вы захотите попробовать:

self.object.view_count += 1
self.object.save()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...