2010-01-13 1 views
0

새로운 Django 앱을 설정하고 필드가 NULL 인 레코드를 제한하여 주어진 테이블에 대해 Admin을 사용자 정의해야합니다. 기본적으로 내장 필터입니다.Django admin changelist - 필드가 NULL 인 곳을 제한합니다.

changelist_view와 같은 것처럼 보일 수 있지만 변경 사항이 어떤 모양인지 확실하지 않습니다.

현재 changelist_view를 (를) 재정의하지 않으므로 코드를 포함 할 필요가 없습니다.

답변

1

당신은 기본 관리자를 대체 할 수 있습니다,하지만 당신은 명시 적으로 모든 쿼리에서 원래의 관리자를 지정해야합니다 단점이 있습니다 정말 현재이 작업을 수행 할 수있는 좋은 방법이 아니다

class MyManager(models.Manager): 
    def get_query_set(self): 
     return super(MyManager, self).get_query_set().filter(my_field__isnull=False) 

class MyModel(models.Model): 
    objects = MyManager() 
    all_objects = models.Manager() 

MyModel.all_objects.all() # all objects including those having my_field=None 
+0

고마워요. 안토니. 이 예제는 모든 객체에 적용됩니다. MyManager와 MyModel은 해당 필터로 모든 쿼리를 제한합니다. – jro

+0

django 관리자는'.objects'에 연결된 관리자를 사용합니다. 당신이 좋아하는 관리자 ('objects' 또는'all_objects')를 사용할 수 있습니다. 경우에 따라 ("역"조회와 같이)'objects'가 쿼리에서 자동으로 사용되므로 코드에서이 모델을 자주 사용하는 경우 다른 솔루션을 검색하십시오. 이것은 퀵 픽스 (quickfix)와 같습니다. –

+0

Antony에게 감사드립니다. 대신 내 관리자 페이지를 작성하려고합니다. – jro

1

-이 실제로 Django에서 열린 티켓인데 QuerySet이 관리자보기에 사용되는 것을 사용자 정의하는 기능을 요청합니다. #10761 티켓을 참조하십시오. Antony's solution은 단기간에 작동하지만 적절한 해결을 위해 티켓이 해결 될 때까지 기다려야 할 수 있습니다.

+0

감사합니다. Dominic. – jro

0

제한된 쿼리 세트 관리자를 객체로 사용하기로 결정했습니다. ModelAdmin의 경우 queryset()을 django/contrib/admin/options.py에서 복사하고 _default_manager를 광산 무제한 쿼 리셋 관리자로 변경했습니다. 단순한!