Запрос одного элемента модели из другой модели

Пожалуйста, помогите мне.

У меня есть список артистов (музыкантов) и их альбомов, которые они создали. T

Мои модели выглядят следующим образом:

from django.db import models

# Create your models here.
class ArtistModel(models.Model):
    Artist_name = models.CharField(max_length=50, null=True, default=False)
    
    def __str__(self):
        
        return self.Artist_name
    
class AlbumsModel(models.Model):
    
    Genre = {
        ('Hip-Hop','Hip-Hop'),
        ('Rnb','Rnb'),
        ('Rock n Roll','Rock n Roll'),
        ('House','Housep'),
        ('Gospel','Gospel'),
        ('Classical','Classical'),
    }
    
    Album_name = models.CharField(max_length=50, null=True, default=False)  
    Album_by = models.ForeignKey(ArtistModel ,max_length=50, null=True, default=False, on_delete=models.CASCADE)      
    Music_genre = models.CharField(max_length=50, null=True, default=False, choices=Genre)    
    
    def __str__(self):
        return self.Album_name

Мои взгляды

from django.shortcuts import render
from . models import AlbumsModel, ArtistModel

# Create your views here.
def Albums(request):
    AllAlbums = AlbumsModel.objects.all()
    return render(request, 'Albums/Home.html',
                  {'AllAlbums':AllAlbums})


def Artist(request):
    AllArtist = ArtistModel.objects.all()
    return render(request, 'Albums/Artist.html',
                  {'AllArtist':AllArtist})

Мой HTML следующий:

{% extends 'Albums/Layout.html' %}

{% block content %}
<h1>Artist</h1>
<br/>
{% for artistview in AllArtist %}
<a href="{% url 'Artist_album' %}">
    {{artistview}}<br>
</a>
{% endfor %}
{% endblock %}

Моя оболочка выглядит следующим образом:

In [24]: All_Albums
Out[24]: <QuerySet [<AlbumsModel: THE EMINEM SHOW>, <AlbumsModel: THE MARSHELL MATHERS LP>, <AlbumsModel: BLUEPRINT>, <AlbumsModel: THE BLACK ALBUM>, <AlbumsModel: 4:44>, <AlbumsModel: MAGNA CARTA HOLY GRAIL>, <AlbumsModel: JESUS IS KING>, <AlbumsModel: DONDA>, <AlbumsModel: GRADUATION>]>

In [25]: Artist_all
Out[25]: <QuerySet [<ArtistModel: Eminem>, <ArtistModel: Jayz>, <ArtistModel: Kanye West>]>

Я хотел бы узнать, как выбрать одного исполнителя "Eminem" и чтобы все альбомы, связанные с его моделью, были перечислены на следующей странице.

Итак, я выбираю "Jayz" и попадаю на другую страницу со всеми его альбомами "BLUEPRINT, THE BLACK ALBUM, 4:44"

Заранее спасибо.

Используйте обратный аксессор следующим образом:

artist_model = ArtistModel.objects.get(Artist_name="Eminem")
eminem_albums = artist_model.albumsmodel_set.all()

А в вашем шаблоне:

{% for album in artist_model.albumsmodel_set.all %}
    {{ album }}
{% endfor %}

Два совета по соглашениям об именовании:

  1. Модели Django должны быть PascalCase, но не содержать слово 'Model', если это не помогает описанию.
  2. .
  3. Функции (включая представления), поля модели и переменные должны быть в snake_case
  4. .
Вернуться на верх