2010-06-17 2 views
11

django admin에서 ModelAdmin에 대한 search_fields를 설정하여 주어진 속성을 검색 할 수 있습니다. 내 모델 클래스에는 실제 모델 속성이 아닌 속성이 있습니다. 즉, 데이터베이스 테이블 내에 있지 않습니다. 이 속성은 관계를 통해 현재 모델에 연결되지 않은 다른 데이터베이스 테이블과 관련됩니다. 하지만 검색 할 수 있기를 원하므로 검색 필드가 채워 졌을 때 필터링을 수행하기 위해 관리 사이트에서 생성 한 쿼리를 어떻게 든 사용자 정의해야합니다. 가능하면 어떻게 될까요? 사용자 지정 속성의 데이터베이스 테이블을 쿼리 한 다음 검색에 적합한 모델 클래스의 ID를 반환합니다. 이것은 내가 말했듯이, 관리자 사이트 검색 쿼리로 흘러 들어갑니다.Django adminsite search_fields 쿼리를 사용자 정의

감사합니다.

+0

아마도 다른 모델에 정의 된 역관계를 의미합니까? –

답변

-2

이 힘 당신은

더 읽어

admin.ModelAdmin를 확장하는 관리 클래스에 search_fields = ['user__email'] 같은 search_fields = ['foreign_key__related_fieldname'] 를 사용해야합니다

http://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.search_fields

+1

글쎄, 내가 말했듯이, 모델 클래스는 다른 모델에 묶여 있지 않으므로 외래 키가 없다. 그러므로 이것은 작동하지 않습니다. – dArignac

+0

그러면 관계가 무엇입니까? – shahjapan

0

search_fields의 = [ 'foreign_key__related_fieldname를'] 도움이 될 수 있습니다 here

+0

이것은 @shahjapan의 대답과 같은 문제를 겪고있다. – FSp

11

django 1.6부터 ModelAdmin 하위 클래스에 get_search_results 메소드를 정의하여 검색을 사용자 정의 할 수 있습니다.

django documentation에 설명되어 있습니다. 다음의 예는이 doc로부터 카피됩니다.

class PersonAdmin(admin.ModelAdmin): 
    list_display = ('name', 'age') 
    search_fields = ('name',) 

    def get_search_results(self, request, queryset, search_term): 
     queryset, use_distinct = super(PersonAdmin, self).get_search_results(request, queryset, search_term) 
     try: 
      search_term_as_int = int(search_term) 
      queryset |= self.model.objects.filter(age=search_term_as_int) 
     except: 
      pass 
     return queryset, use_distinct 
관련 문제