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

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

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

1 Ответ

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

Во-первых, вам нужен набор запросов всех экземпляров 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)
...