簡體   English   中英

Django - 從外鍵獲取數據

[英]Django - get data from foreign key

我正在研究一個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    

這是我建立的一般關系。

我想要做的是,在一個模板中可以訪問所有'Ones'的列表,並通過每個',可以訪問每個Many和它的相關屬性。 我可以看到如何訪問單個“One”的屬性,但不知道如何傳遞所有這些屬性及其相關的“Many”模型以及每個模型的相關屬性。 基本上我想要的輸出會有一個帶有One的下拉列表,當提交時,一些Javascript將使用'Many'模型中的列表來做一些事情。

任何建議將不勝感激。

可以通過對象的___set attribte訪問反向查找。 因此,要獲得給定“One”的所有“Many”對象,您可以執行one.many_set

Django反向查找外鍵

關於模板中的用法,可以通過添加“all”來訪問集合(因為集合返回一個查詢集,您可以針對它運行查詢,包括在模板中)

在Django中直接訪問ForeignKey設置模板

請參閱Django文檔的相關部分: https//docs.djangoproject.com/en/dev/topics/db/queries/#following-relationships-backward

你可以使用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

如果已經有One模型類的對象,則可以使用many_set訪問many對象(參見: 向后關系 ):

{% 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執行db查詢。 為了提高效率,您可以在視圖中使用one_objs預取many_set

在您的視圖中,使用prefetch_related

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM