0
Django
で非常に単純なヒットカウントモデルを実装します。Djangoはクラス属性とインスタンスプロパティをモデル化していますか?
models.py
from django.db import models
from model_utils.models import TimeStampedModel
from posts.models import Post
class PostHit(TimeStampedModel):
post = models.ForeignKey(Post, related_name='post_hits')
num_of_hit = models.IntegerField()
class Meta:
verbose_name_plural = "Post hits"
def __str__(self):
return self.post.title
def increase_hit(self):
self.num_of_hit += 1
views.py
from django.views.generic.detail import DetailView
from django.core.exceptions import ObjectDoesNotExist
from posts.models import Post, PostHit
from posts.forms import CommentForm
class PostDetailView(DetailView):
model = Post
def get_context_data(self, *args, **kwargs):
context = super().get_context_data(**kwargs)
context['category'] = self.kwargs['category']
context['form'] = CommentForm()
context['tracking_hit_post'] = self.tracking_hit_post()
return context
def tracking_hit_post(self):
post = self.model.objects.get(pk=self.object.id)
post_hit = PostHit.objects.filter(post=post).first()
if post_hit:
post_hit.increase_hit()
else:
post_hit = PostHit.objects.create(
post=post,
num_of_hit=1
)
print(post_hit.num_of_hit)
return post_hit.num_of_hit
PostHit
インスタンスが作成されたら、それは私がDetailVie
を訪問increase_hit()
毎回を呼び出します。
しかし、それは正しい方法ではありません。
最初に印刷します。ページをリフレッシュすると2が印刷されます。次にリフレッシュすると、2がもう一度印刷されます。 2の後にはもう増加しません。
私のコードには何が問題なのですか?クラス属性とインスタンスプロパティを誤解しましたか?
ありがとうございました! – user3595632