Вы смешиваете различные способы подсчета попаданий и отображения количества попаданий.
Прежде всего, чтобы подсчитать количество попаданий для одного объекта, вам нужно добавить DetailView, которое показываетодна песняВ этот класс также добавляется параметр count_hit
Что-то вроде этого (views.py):
from hitcount.views import HitCountDetailView
class SongDetailView(HitCountDetailView):
model = Song
count_hit = True
template = 'song_detail.html'
def get(self, request, *args, **kwargs):
self.object = self.get_object()
context = self.get_context_data(object=self.object)
return redirect(self.object.song.audio_file.url)
HitCountDetailView
- это встроенное представление HitCount, которое получает один объект и суммирует HitCounts.
Добавьте шаблон для отображения одной песни (song_detail.html):
<p><strong><h5>{{ object.song_title }}</h5></strong></p>
<p><h5>{{ object.artist }}</h5></p>
<span>plays: {% get_hit_count for [object] %}</span>
Затем в свои URL добавьте следующий шаблон (urls.py):
urlpatterns = [
...
path('song/<int:id>/', SongDetailView.as_view(), name='song-detail'),
...
]
Теперь у вас есть два URL-адреса, один из которых ведет к дому, а другой - к песне /, первый должен отображать список песен, второй - только одну песню.
В некотором ненужном / неправильном кодеВаш исходный код, который я объясню ниже:
Ваш models.py имеет общее отношение к HitCount, которое не является необходимым, если вы не хотите делать прямой поиск в этих моделях HitCount, но сейчас,Вы можете оставить это
HitCountMixin
следует добавить к представлению, в частности к представлению на основе классов, но не к модели.Ваш файл models.py должен выглядеть следующим образом:
class Songs(models.Model):
...
updated = models.DateTimeField(auto_now=True, auto_now_add=False)
class Meta:
ordering = ['-updated']
def __str__(self):
return self.song_title
Ваш шаблон выглядит как часть файла, но если это не так, он неверен.Лучше было бы перебрать каждую песню (вы также можете связать ее с новым подробным видом), например:
{% for song in songs %}
<p><strong><h5>{{ song.song_title }}</h5></strong></p>
<p><h5>{{ song.artist }}</h5></p>
<span>plays: {% get_hit_count for [song] %}</span>
<a href="{% url 'song-detail' song.id %}">Play song</a>
{% endfor %}