首页 > 解决方案 > 当外键不在当前模型中时,如何获取模型的查询集的值?

问题描述

我有以下型号:

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

class Catalogue(models.Model):
    work_music = models.ForeignKey(Work_Music, verbose_name=_('work_music'), on_delete=models.PROTECT)
    name = models.CharField(max_length=100, null=True, blank=True)
    name_short = models.CharField(max_length=100, null=True, blank=True)
    no = models.CharField(max_length=100, null=True, blank=True)

related_field() 仅适用于 Work_Music 中的外键。许多目录/目录编号可以映射到一段音乐 (Work_Music)。如何在 Work_Music 上构建查询集以提取与作品相关的所有目录?

标签: djangodjango-modelsdjango-queryset

解决方案


使用 catalogue_set。

Django 的 ORM 会在外键的导航模型(本例中为 Work_Music)上自动为您创建字段。对于“一对多”关系,这是一个查询集,其中存在外键的模型名称附加_set. 对于“一对一”关系,这只是存在外键的模型的名称。

假设一个名为 Work_Music 的实例work_music_instance

catalogues = work_music_instance.catalogue_set.all()

或者

catalogues = work_music_instance.catalogue_set.filter(...) # any query set operation

推荐阅读