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 %}
Другие вопросы по тегам