[英]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
關於模板中的用法,可以通過添加“all”來訪問集合(因為集合返回一個查詢集,您可以針對它運行查詢,包括在模板中)
請參閱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.