Как отобразить метод __str__ в шаблоне в Django? - PullRequest
1 голос
/ 30 января 2020

У меня есть следующие модели:

class Work_Music(MPTTModel, Work):
    name = models.CharField(max_length=10, null=True, blank=True)


class Cast(models.Model):
    name = models.CharField(max_length=100, null=True, blank=True)

    def __str__(self):
        return self.name


class WorkCast(models.Model):
    work = models.ForeignKey(Work_Music, verbose_name=_('work'), related_name='workcast', null=True, blank=True, on_delete=models.PROTECT)
    cast = models.ManyToManyField(Cast, verbose_name=_('cast'), related_name='workcast', blank=True)

    def __str__(self):
        return "%s" % (
            ", ".join(character.name for character in self.cast.all())
        )

Это выдаст: Символ # 1, Символ # 2, Символ # 3.

Я передаю в свой view.py этот QuerySet как контекст:

work = Work_Music.objects.get(pk=self.kwargs['pk']).get_descendants(include_self=False)

Как отобразить строку, возвращаемую при вызове экземпляра модели WorkCast (например, «Символ № 1, Символ № 2, Символ № 3»)?

У меня есть это в настоящее время:

{{ work.workcast }}

, и он отображает Нет

1 Ответ

0 голосов
/ 30 января 2020

Поскольку вы запрашиваете ForeignKey в обратном порядке, число связанных моделей WorkCast представляет собой коллекцию, которая может содержать ноль, один или более объектов WorkCast. Таким образом, вы должны повторить , например:

{% <b>for</b> workcast in work<b>.workcast.all</b> %}
    {{ workcast }}
{% endfor %}
...