django - 如何从多对多模型生成列表?
问题描述
我有以下型号:
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()),
)
解决方案
首先,您需要一个包含所有您想要的 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)
推荐阅读
- hive - 当蜂巢插入中途失败时会发生什么?
- javascript - 如何从 Electron 应用程序在 Chrome 中打开链接?
- javascript - 对许多重新渲染和功能的反应原生应用程序在状态变化时保持运行
- visual-studio-code - VSCode:打开文件时保持焦点在源代码管理Viewlet
- javascript - ReferenceError:未定义通道
- excel - VBA 用户表单代码仅在工作表可见时才有效
- angular - Angular 9 取消 HTTP 请求
- kubernetes - 预检 (OPTIONS) 返回 403,CORS
- python - 使用 meshlabxml remiss.simplify 进行网格简化
- amazon-elasticache - 如何检查 AWS Elasticache(REDIS) 中的 if config 命令名称是否已更改