Django - 从外键获取数据

新手上路,请多包涵

我正在做一个 Django 项目,并试图为我的数据创建一些链接模型,这些模型在我看来是有效的,但我似乎无法弄清楚如何访问链接数据。

 class One(models.Model)
  name = models.CharField(max_length=50)
  list = models.ArrayField(models.CharField(max_length=50), blank=True)

  def __str__(self):
    return self.name

class Many(models.Model)
  name = models.CharField(max_length=50)

  related = models.ForeignKey(One, null=True, blank=True)

  def __str__(self):
    return self.name

这是我建立的一般关系。

我想做的是,在模板中可以访问所有“一”的列表,并通过其中的每一个,可以访问每个“多”及其相关属性。我可以看到如何访问单个“一个”的属性,但看不到如何传递所有这些属性及其相关的“许多”模型以及每个模型的相关属性。本质上,我想要的输出会有一个带有 One 的下拉列表,当提交时,一些 Javascript 将使用“Many”模型中的列表来做一些事情。

任何建议将不胜感激。

原文由 Nowandthen98 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 640
2 个回答

如果您已经拥有 One 模型类的对象,您可以使用 --- 访问 many 对象 many_set (参考: 关系):

 {% for one_obj in one_objs %}
    {% for m_obj in one_obj.many_set.all %}
        # do stuff with m_obj here
    {% endfor %}
{% endfor %}

这里要注意的一件重要事情是,这将为每个 m_obj 执行一个数据库查询。为了提高效率,您可以在您的视图中使用 one_objs 预取 many_set

在您看来,使用 prefetch_related

 one_objs = One.objects.all().prefetch_related('many_set')

原文由 AKS 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以使用 Django 的“ prefetch_related ”和 Django 的“ related_name ”。

此外,这个问题已在 此处 得到解答。

不过,这可能是您想要的,首先,将您的外键定义更改为:

 related = models.ForeignKey(One, null=True, blank=True, related_name='relateds')

然后你可以反向获取外键:

 one = One.objects.get(name="TheOneYouWant").prefetch_related('relateds')
manys = one.relateds

原文由 Qrom 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题