2009-10-30 53 views
15

我試圖定義一個模型酒吧的行爲 - 但我只想與用戶美孚酒吧對象的列表。有沒有辦法在django admin中過濾查詢集?

在我開始在管理代碼中傳遞一個自定義查詢集(或者編寫一個劫持管理員的多選框支持的自定義視圖)之前,我想知道是否有可行的方法按原樣切分數據,以便獲得列表視圖。

注意:我沒有試圖按照相關用戶進行排序,也沒有嘗試向默認列表視圖添加額外選項以按用戶進行篩選;我需要一個特定的URL或視圖,它會給我只是一個酒吧對象的列表特定的用戶Foo。

回答

25

它沒有記錄,但標準更改列表視圖接受普通的查詢集過濾器參數作爲GET參數。所以你可以這樣做:

/admin/myapp/bar/?user__username=foo 
+0

而可能性列表在這裏:https://docs.djangoproject.com/en/dev/ref/models/querysets/#field-lookups – AJP

25

如果你使用的是1.1.x,它實際上非常容易傳遞一個自定義的查詢集。你所需要做的就是覆蓋ModelAdmin上的queryset()方法。事情是這樣的:

class ThisAdmin(admin.ModelAdmin): 
    def queryset(self, request): 
     """ 
     Filter the objects displayed in the change_list to only 
     display those for the currently signed in user. 
     """ 
     qs = super(ThisAdmin, self).queryset(request) 
     if request.user.is_superuser: 
      return qs 
     return qs.filter(owner=request.user) 

這實際上可以在1.0.x的分支進行爲好,但需要你的ModelAdmin多一點額外的代碼。

這種方法的優點是它不會弄亂你的好漂亮管理員網址(也正因此,使其極爲明顯,以用戶介紹如何查看其他人的對象)。

+2

這適用於管理員直接編輯的模型。如何在下拉菜單中填寫自動填充的外鍵。 –

+0

limit_choices_to = {} –

+2

對於所有最新版本的Django,「def queryset」都是「def get_queryset」。 –

相關問題