2010-02-17 3 views
12

기본적으로 장고 관리 사이트는 볼 수있는 관련 모델/테이블의 모든 레코드를 보여줍니다. 특정 기준을 충족하는 레코드 만 표시하려면 어떻게해야합니까?장고 관리 사이트에서 볼 수있는 쿼리 세트/레코드를 제한하는 방법은 무엇입니까?

+0

기본적으로 변경 하시겠습니까? 아니면 변경 목록 페이지에서 해당 옵션을 사용 하시겠습니까? –

+0

기본적으로. 페이지를로드 할 때마다 몇 가지 요구 사항을 의미하는 레코드 만 표시됩니다. 이러한 요구 사항은 백엔드에서 변경할 수 있습니다. – Viet

+0

또한 changelist 페이지에 이들을 표시하는 방법은 무엇입니까? – Viet

답변

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

+0

하지만이 방법으로 검색하고 싶다면 다른 사용자에게 추가 쿼리를 보낼 수 없습니다. 그래서 내가 읽는 방식대로 질문에 대답하지 않습니다. –

+9

Django 1.6'queryset'가'get_queryset'으로 바뀌 었습니다 – peter2108

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

거기서 무슨 일이 일어 났는지보십시오! 그의 대답은 좋았다 ..... 너의 것이 더 좋았다. 스털링 작업. –

관련 문제