Django - 从外键获取数据

Now*_*n98 4 python 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    
Run Code Online (Sandbox Code Playgroud)

这是我建立的一般关系。

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

任何建议将不胜感激。

AKS*_*AKS 6

如果您已经拥有模型类的对象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 %}
Run Code Online (Sandbox Code Playgroud)

这里需要注意的一件重要事情是,这将为每个m_obj. 为了提高效率,您可以在视图中预取many_setwith 。one_objs

在您看来,使用prefetch_related

one_objs = One.objects.all().prefetch_related('many_set')
Run Code Online (Sandbox Code Playgroud)

  • 你的第一个答案是循环中的循环,这将导致 O(n^2)。这个很贵。 (2认同)