首页 > 解决方案 > 如何访问多对多字段数据?

问题描述

我有以下型号:

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()

不产生任何输出。

如何将其显示为中间有逗号的列表?

标签: djangodjango-modelsdjango-templatesdjango-views

解决方案


如果我理解正确,您将向您的模板发送一个名为“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 模板语言添加了一些您可以使用的额外变量。在这种情况下,我们使用它来避免在列表的最后一个条目之后放置逗号。


推荐阅读