我試圖定義一個模型酒吧的行爲 - 但我只想與用戶美孚酒吧對象的列表。有沒有辦法在django admin中過濾查詢集?
在我開始在管理代碼中傳遞一個自定義查詢集(或者編寫一個劫持管理員的多選框支持的自定義視圖)之前,我想知道是否有可行的方法按原樣切分數據,以便獲得列表視圖。
注意:我沒有試圖按照相關用戶進行排序,也沒有嘗試向默認列表視圖添加額外選項以按用戶進行篩選;我需要一個特定的URL或視圖,它會給我只是一個酒吧對象的列表特定的用戶Foo。
我試圖定義一個模型酒吧的行爲 - 但我只想與用戶美孚酒吧對象的列表。有沒有辦法在django admin中過濾查詢集?
在我開始在管理代碼中傳遞一個自定義查詢集(或者編寫一個劫持管理員的多選框支持的自定義視圖)之前,我想知道是否有可行的方法按原樣切分數據,以便獲得列表視圖。
注意:我沒有試圖按照相關用戶進行排序,也沒有嘗試向默認列表視圖添加額外選項以按用戶進行篩選;我需要一個特定的URL或視圖,它會給我只是一個酒吧對象的列表特定的用戶Foo。
它沒有記錄,但標準更改列表視圖接受普通的查詢集過濾器參數作爲GET參數。所以你可以這樣做:
/admin/myapp/bar/?user__username=foo
如果你使用的是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多一點額外的代碼。
這種方法的優點是它不會弄亂你的好漂亮管理員網址(也正因此,使其極爲明顯,以用戶介紹如何查看其他人的對象)。
這適用於管理員直接編輯的模型。如何在下拉菜單中填寫自動填充的外鍵。 –
limit_choices_to = {} –
對於所有最新版本的Django,「def queryset」都是「def get_queryset」。 –
而可能性列表在這裏:https://docs.djangoproject.com/en/dev/ref/models/querysets/#field-lookups – AJP