Django - Выбор первичного ключа текущего объекта "Исполнитель" в качестве фильтра из списка результатов "Все дорожки"
Я работаю над сайтом звукозаписывающей компании на Django 3, используя Python3. (Исполнитель, релиз, структура трека)
Я пытаюсь отфильтровать список всех треков на основе страницы текущего исполнителя. music / artist / Я хочу отфильтровать это в файле context_processors, но не знаю, как это сделать, и я готов сделать это в любом случае, если это невозможно.
artist.html
{% block body %}
<div class="container artistitem">
<h2>{{ artist.artist_name }}</h2>
<h3>{{ artist.artist_url }}</h3>
<h5>{{ artist.artist_id }}</h5>
<div class="artistimage"><img src="{{ artist.artist_logo.url }}"></div>
<div>
<h3>Discography</h3>
<p>
<ul>
<!-- for this artist id in all releases print all release name -->
<!-- {% for release.artist.id in all_releases %}
<li>
{{ release.release_title }}
</li>
{% endfor %} -->
<!-- for this artist id in all releases print all release name -->
{% for track in all_tracks_byartist %}
<li>
{{ track.track_title }}
</li>
{% endfor %}
</ul>
</p>
</div>
</div>
{% endblock %}
models.py
from django.db import models
# Create your models here.
class Artist(models.Model):
artist_name = models.CharField(max_length=250, default='')
artist_logo = models.FileField()
artist_url = models.URLField(blank=True)
def __str__(self):
return self.artist_name
class Release(models.Model):
artist = models.ForeignKey(Artist, on_delete=models.CASCADE, related_name='release')
release_title = models.CharField(max_length=500)
release_cover = models.FileField()
release_duration = models.IntegerField()
def __str__(self):
return self.release_title
class Track(models.Model):
release = models.ForeignKey(Release, default='', on_delete=models.CASCADE)
artist = models.ForeignKey(Artist, default='', on_delete=models.CASCADE)
track_title = models.CharField(max_length=200)
track_version = models.CharField(max_length=200)
track_genre = models.CharField(max_length=100)
track_duration = models.IntegerField()
track_number = models.SmallIntegerField()
class Meta:
ordering = ["track_number"]
def __str__(self):
return self.track_title
app_name = 'music'
context_processors.py
from music.models import Artist, Release, Track
def all_artists(request):
artist = Artist.objects.all()
return {'all_artists':artist}
def all_releases(request):
release = Release.objects.all()
return {'all_releases':release}
def all_tracks(request):
track = Track.objects.all()
return {'all_tracks':track}
def all_tracks_byartist(request):
track = Track.objects.all()
return {'all_tracks_byartist':track}
Если вам нужны другие файлы, дайте мне знать.
1 ответ
Решение
Использовать обратную связь для получения треков определенного исполнителя.
что-то типа:
{% for track in artist.track_set.all %}
<li>
{{ track.track_title }}
</li>
{% endfor %}