2012-07-03 58 views
0

我有兩個通過Django中的ForeignKey關聯的模型。 (我正在使用Django 1.3)在Admin更改列表視圖中篩選外鍵選擇

Class Person(models.Model): 
    # some fields here like name, gender, etc... 

Class Course(models.Model): 
    # some fields here 
    contact = models.ForeignKey(Person, blank=True, null=True) 

在課程的admin更改列表視圖中,我希望能夠通過ForeignKey聯繫人篩選課程。在admin.py我得到:

class CourseAdmin(admin.ModelAdmin): 
    list_filter = ('contact',) 

這工作得很好。我可以通過所有可用的聯繫人過濾課程。現在,我只想顯示實際上已附加課程的聯繫人。 我在這裏閱讀,通過創建一個自定義FilterSpec來實現CustomFilters。我不知道這是否是正確的方向,因爲我只需要進一步過濾用於顯示聯繫人選項的查詢集。

在shell我通過這個獲得所需的查詢集:

contacts=Person.objects.filter(course__in=Course.objects.all()).distinct() 

我已經讀過,你可以很容易地在1.4實現這一點,但我仍被綁1.3 有人能請點我進入正確方向?謝謝!

回答

1

Django 1.3也支持過濾器,但過濾器類在1.4中被移動/重命名。並且使用FilterSpec是實現您的目標的方式。您不僅需要過濾查詢集,而且還需要正確處理來自QueryString的應用過濾器。所以繼續使用過濾器。這是一個非常好的代碼片段,可以處理FK過濾,並且具有不錯的選擇:http://djangosnippets.org/snippets/2260/

+0

這看起來很有希望。謝謝! – Jingo