django admin search_fields 排除

django admin search_fields with exclude

在我们的 django-admin 站点中使用 django search_fields,我们在数据库中搜索大量内容。 我想在文本框中的 search_fields 中有一个排除选项(或任何其他方式)

示例: 在我的管理文件中:

 search_fields = ('name', 'os', 'owner__first_name', 'owner__last_name',)

我正在寻找的网页中 'John' --> 得到一些结果,包括 john lennon

我很想拥有'John {"exclude": "Lennon"}'

--> 这将给出一些不包括 john lennon

的结果

您可以通过在 ModelAdmin 子类中定义 get_search_results 方法来自定义搜索。 虽然还没有测试过..

class YourModelAdmin(admin.ModelAdmin):
    list_display = ('name', 'os')
    search_fields = ('name', 'os', 'owner__first_name', 'owner__last_name',)

    def get_search_results(self, request, queryset, search_term):
        queryset = super(YourModelAdmin, self).get_search_results(request, queryset, search_term)
        try:
            queryset |= self.model.objects.exclude(owner__last_name__iexact='lennon')
        except:
            pass
        return queryset