首页 > 解决方案 > 如何从多对多模型生成列表?

问题描述

我有以下型号:

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)

我正在尝试生成一个列表:

Cast member #1, cast member #2, cast member #3 from the WorkCast model:

我尝试将其添加到模型中,但没有生成任何内容。怎么了?

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

标签: djangodjango-modelsdjango-templatesdjango-views

解决方案


首先,您需要一个包含所有您想要的 Cast 实例的查询集。

cast_qs = WorkCast.objects.get(id=<id>).cast.all()

然后,如果需要,您可以简单地将该 QS 转换为列表。

cast_qs = list(cast_qs)

如果您只想要列表中的某些值,则可以在查询集上调用 values_list。

names = cast_qs.values_list('names', flat=True)

推荐阅读