Обновлять модель каждый раз при создании представления в django - PullRequest
1 голос
/ 26 января 2020

Я пытаюсь обновлять свой экземпляр модели Post каждый раз, когда создается представление PostDetail. До сих пор я пробовал несколько подходов, но ни один из них не работал. Я знаю, что есть готовое решение (django -hitcounter), но я бы хотел написать его сам, чтобы понять, что происходит.

Цель - добавить 1 в post.views каждый раз, когда пользователь Доступ к представлению PostDetail.

models.py

class Post(models.Model):
    title = models.CharField(max_length=200, unique=True)
    slug = models.SlugField(max_length=200, unique=True)
    author = models.ForeignKey(
        User, on_delete=models.CASCADE, related_name='blog_posts')
    updated_on = models.DateTimeField(auto_now=True)
    content = models.TextField()
    created_on = models.DateTimeField(auto_now_add=True)
    status = models.IntegerField(choices=STATUS, default=0)
    views = models.IntegerField(default=0)

    class Meta:
        ordering = ['-created_on']
views.py

class PostDetail(generic.DetailView):
    model = Post
    template_name = 'blog/post_detail.html'
urls.py

urlpatterns = [
    path('<slug:slug>/', views.PostDetail.as_view(), name='post_detail'),
]

1 Ответ

0 голосов
/ 26 января 2020

Как только вы дойдете до точки, где Django может вернуть ответ (например: успешно найден объект Post и т. Д. c ...) - вы можете увеличить количество просмотров для этого объекта и затем перейдите к возврату ответа, поэтому если вы измените свое мнение на:

class PostDetail(generic.DetailView):
    model = Post
    template_name = 'blog/post_detail.html'

    def render_to_response(self, context, **kwargs):
        self.object.views += 1
        self.object.save()
        return super().render_to_response(context, **kwargs)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...