У меня есть проект django с тремя нижеприведенными моделями:
models.py
from django.db import models
from django.contrib.auth.models import User
class Album(models.Model):
owner = models.ForeignKey(User)
title = models.CharField(max_length=127)
artist = models.CharField(max_length=63)
release_date = models.DateField()
logo = models.ImageField(blank=True, upload_to='album_logos', default='album_logos/no-image.jpeg')
t_added = models.DateTimeField(auto_now_add=True)
slug = models.SlugField(null=True, blank=True, max_length=63)
class Meta:
ordering = ['-release_date']
def __str__(self):
return self.title
class Song(models.Model):
album = models.ForeignKey(Album, on_delete=models.CASCADE)
name = models.CharField(max_length=255)
# is_favorite = models.BooleanField(default=False)
favorites = models.IntegerField(default=0)
song_file = models.FileField(blank=True, null=True, upload_to='song_files', default='song_files/mektub.mp3')
class Meta:
ordering = ['name']
def __str__(self):
return self.name
class Favorite(models.Model):
user = models.ForeignKey(User)
song = models.ForeignKey(Song)
created = models.DateTimeField(auto_now_add=True)
Как видно из этих моделей, многие пользователи могут добавлять в избранное множество песен. В шаблоне я хочу добавить класс к песням, которым пользуется аутентифицированный пользователь:
template
<span {% if authenticated user favorited this song %}class="favorited" {% endif %}></span>
Моя проблема в том, что я не знаю, как написать «если аутентифицированный пользователь одобрил эту песню» в шаблоне. В терминале я могу получить эту информацию по этому коду:
user_favorited_this = song.favorite_set.filter(user=sample_user) and True or False
Я не мог сделать то же самое в шаблоне, так как он не поддерживает передачу аргумента в метод фильтра. Как я могу преодолеть эту проблему?