2010-11-01 50 views
8

訪問ForeignKey的值我有一個Django模型,像這樣:Django的 - 沒有擊中數據庫

class Profile_Tag(models.Model): 
    profile = models.ForeignKey(Profile) 
    tag = models.ForeignKey(Tag) 

和像這樣一個觀點:

pts = Profile_Tag.objects.all() 
for pt in pts: 
    print pt.profile.id 

有沒有什麼辦法能夠訪問配置文件外鍵沒有擊中數據庫每次?我不想查詢配置文件表。我只想從Profile_Tag表中獲取id。

+1

你怎麼知道它「命中」數據庫?在ORM層和數據庫中都有廣泛的緩存管理。 – 2010-11-01 23:52:45

+0

那麼,對於讀這個並回答洛特問題的人來說......它在Django 1.4(至少)中做了一個數據庫命中。您可以打開數據庫日誌記錄,查看所有查詢和'pt.profile.id'查詢結果,而'pt.profile_id'沒有。他們可能會對'.id'進行調用而不會導致命中,所以這可能會在將來發生變化(或者已經不同了,我沒有測試過更新的版本)。 – 2015-12-09 16:59:30

回答

10

你可以做這樣的事情:

pt_ids = Profile_Tag.objects.values_list('profile', flat=True) 

這將返回所有的ID列表。對於模型實例,還有另一種方法:

pts = Profile_Tag.objects.all() 
for pt in pts: 
    print pt.profile_id 
+0

優秀。謝謝。猜猜我應該考慮嘗試 – Jesse 2010-11-02 00:09:37