2010-02-17 68 views
12

默認情況下,Django管理站點顯示相關模型/表的所有記錄以供查看。我怎樣才能顯示符合某些標準的記錄?如何限制queryset /記錄在Django管理站點中查看?

+0

您的意思是默認情況下,還是隻是希望從更改列表頁面可以使用該選項? – 2010-02-17 09:05:31

+0

默認情況下。每當我加載頁面,它只顯示意味着一些需求的記錄。這些要求可以在後端進行更改。 – Viet 2010-02-17 09:07:25

+0

還有,如何讓這些顯示在更改列表頁面中? – Viet 2010-02-17 09:08:09

回答

25

在您的管理定義中,您可以定義一個返回該模型管理員的查詢集的方法queryset()。例如:

class MyModelAdmin(admin.ModelAdmin): 
    def queryset(self, request): 
     qs = super(MyModelAdmin, self).queryset(request) 
     return qs.filter(user=request.user) 

然後只有管理員可以看到有user=request.user的對象。

+1

+1我很高興看到這個,它變得如此簡單!謝謝! – Viet 2010-02-17 11:17:37

+0

但通過這種方式,如果您想要搜索其他用戶,則無法爲其他用戶提供其他查詢。所以它不會以我閱讀它的方式回答問題。 – 2011-09-16 15:28:22

+9

由於Django 1.6'queryset'已被替換爲'get_queryset' – peter2108 2015-08-06 16:00:56

3

我知道這有一個「接受的答案」,但我只是想拋出這個問題,因爲我在追求別的東西時遇到了這個答案,並意識到我有一個替代解決方案,我經常找到並使用這個解決方案,粒度級別控制比接受的答案。

class TestAdmin(admin.ModelAdmin): 
    def formfield_for_foreignkey(self, db_field, request, **kwargs): 
     if db_field.name == "FIELD": 
      kwargs["queryset"] = TestModel.objects.filter(test=False) 
     return super(TestAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs) 

    def formfield_for_manytomany(self, db_field, request, **kwargs): 
     if db_field.name == "FIELDS": 
      kwargs["queryset"] = TestModel.objects.filter(test=False) 
     return super(TestAdmin, self).formfield_for_manytomany(db_field, request, **kwargs) 
+0

看看那裏發生了什麼!他的回答很好,你的表現更好。英鎊工作。 – 2017-10-13 00:01:40

相關問題