Запрос одного элемента модели из другой модели
Пожалуйста, помогите мне.
У меня есть список артистов (музыкантов) и их альбомов, которые они создали. 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 %}
Два совета по соглашениям об именовании:
- Модели Django должны быть
PascalCase
, но не содержать слово 'Model', если это не помогает описанию. .
- Функции (включая представления), поля модели и переменные должны быть в
snake_case
.