그래서 WeizhongTu의 답변에서 코드를 사용하여 그다지 명백하지 않은 오류가 발견되었습니다. 우리는 모두 필터링을 사용하려고이 코드를 검색 할 때 필터링이 선으로 그림자가되어
queryset = self.model.objects.filter(eval(query_condition))
만 이전 결과를 사용하는 것이 중요합니다. 따라서 당신은 queryset을 얻기 위해 결코 self.model.objects
을 사용하지 말아야 만하지만, 쿼리 세트 자체 만 필터링하면됩니다. 이와 같이 :
def get_search_results(self, request, queryset, search_term):
# search_term is what you input in admin site
# queryset is the list of objects passed to you
# by the previous functions, e. g. filtering
search_term_list = search_term.split(' ') #['apple','bar']
search_columns = ('name','age','address')
# convert to Q(name='apple') | Q(name='bar') | Q(age='apple') | ...
query_condition = ' | '.join(['Q(%s="%s")'%(x,y) for x in search_term_list for y in search_columns])
appended_queryset = queryset.filter(eval(query_condition))
# queryset is search results
queryset, use_distinct = super(PersonAdmin, self).get_search_results(request, queryset, search_term)
queryset |= appended_queryset
return queryset, use_distinct
달성하려는 행동을 정확히 설명해주십시오. 이상적으로 예제를 제공하십시오. –
방금 예제를 추가했습니다 –
내 대답이 업데이트되었습니다. 읽을 수 있고 수정 한 다음 시도해 볼 수 있습니다. – WeizhongTu