【问题标题】:How to get values for a queryset for an model when the foreign key is not in the current model?当外键不在当前模型中时,如何获取模型的查询集的值?
【发布时间】:2019-09-17 18:37:56
【问题描述】:

我有以下型号:

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 上构建查询集以提取与作品相关的所有目录?

【问题讨论】:

    标签: django django-models django-queryset


    【解决方案1】:

    使用 catalogue_set。

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

    假设有一个名为 work_music_instance 的 Work_Music 实例:

    catalogues = work_music_instance.catalogue_set.all()
    

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

    【讨论】:

    • 谢谢,这很有帮助。如果我想同时加入 Work_Music 和 Catalog 模型,以便将作品和目录一起作为模板的上下文发送,该怎么办?
    • 上下文是一个字典。因此,您可以在上下文中的任何键中存储您想要的任何内容,以便在模板中访问它。您还可以在上下文中调用无参数方法,因此您可以调用 {% for catalogue in work_music_instance.catalogue_set.all %} 之类的方法,假设您将上下文中的 work_music_instance 设置为 Work_Music 模型实例
    【解决方案2】:

    首先获取你想要的目录。

       workmusic = Work_Music.objects.all()[0]
    

    然后

       workmusic.catalogue_set.all()
    

    这将返回所有与 workmusic 对象相关的目录。

    【讨论】:

    • 所以你无法获取整套的目录?
    • 不,我们无法获取整套 WorkMusic 的目录。
    • 我们可以获取 WorkMusic 实例的目录
    猜你喜欢
    • 1970-01-01
    • 2020-09-06
    • 1970-01-01
    • 2016-04-06
    • 2021-07-20
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多