Как получить доступ к полевым данным «многие ко многим»? - PullRequest
0 голосов
/ 29 января 2020

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

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

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)
    order = models.DecimalField(max_digits=100, decimal_places=2, null=True, blank=True)

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

В view.py я отправляю следующее в контексте шаблона:

work_cast = WorkCast.objects.get(work=self.kwargs['pk'])

Как отобразить в шаблоне

 Cast #1, Cast #2, Cast #3, Cast #4

Как мне взять всех актеров? Это так?

work.cast.cast.all()

не дает никакого вывода.

Как отобразить его в виде списка с запятыми между?

1 Ответ

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

Если я правильно вас понимаю, вы отправляете переменную контекста в ваш шаблон с именем "work_cast", и эта переменная ссылается на один WorkCast экземпляр.

В языке шаблонов django не используйте () поэтому захват всех членов Cast этого одного WorkCast экземпляра будет

work_cast.cast.all

Вы можете перемещаться между экземплярами, как описано в документах :

{% for cast in work_cast.cast.all %}
    {{ cast }}
    {% if not forloop.last %}
    , 
    {% endif %}
{% endfor %}

В цикле язык шаблона django добавляет некоторую дополнительную переменную, которую вы можете использовать. В этом случае мы используем его, чтобы не ставить запятую после последней записи в вашем списке.

...