Джанго рассчитывает количество просмотров классов
Я пытаюсь сделать что-то вроде представлений YouTube:
models.py
class Video(models.Model):
title = models.CharField(max_length=100)
embed = models.TextField
created_at = models.DateTimeField(auto_now_add=True,editable=False)
updated_at = models.DateTimeField(auto_add=True,editable=False)
visit_count = models.IntegerField(default=0)
def add_visit(self):
if self.visit_count is not None:
self.visit_count += 1
else:
self.visit_count = 0
views.py
class VideoDetail(DetailView):
model = Video
def get_context_data(self, **kwargs):
context = super(VideoDetail, self).get_context_data(**kwargs)
self.object.add_visit()
self.object.save()
return context
Example use:
Video.objects.order_by('-visit_count')
Так что все работает правильно, но не совсем, так как я могу считать лимит по IP.
class Video(models.Model):
title = models.CharField(max_length=100)
embed = models.TextField
created_at = models.DateTimeField(auto_now_add=True,editable=False)
updated_at = models.DateTimeField(auto_add=True,editable=False)
class Visit(models.Model):
video = models.ForeignKey(Video)
ip = models.IPAddressField()
visit_count = models.IntegerField(default=0)
Как вставить в просмотры или модели: visit_count,ip,video.
1 ответ
По мнению:
def get(self, req, *k, **kw)
is_created, visit = Visit.objects.get_or_create(this.object, ip)
if is_created:
this.object.add(visit)
else:
visit.count +=1
visit.save()
Я бы продлил твой add_visit()
модельный метод с IP-адресом:
def add_visit(self, ip):
_, visit = Visit.objects.get_or_create(self, ip)
visit.count += 1
И используйте свой DetailView как есть.
Вы можете использовать get_object - это метод, который извлекает объект
from django.utils import timezone
from django.views.generic import DetailView
from books.models import Author
class AuthorDetailView(DetailView):
queryset = Author.objects.all()
def get_object(self):
obj = super().get_object()
# Record the last accessed date
obj.last_accessed = timezone.now()
obj.save()
return obj
источник: https://docs.djangoproject.com/en/3.1/topics/class-based-views/generic-display/