Django管理员搜索字段复选框
Django Admin中是否有标准方法在搜索旁边添加复选框以选择(在运行时)要搜索的字段 我知道有AdminModel属性Django管理员搜索字段复选框,django,django-admin,Django,Django Admin,Django Admin中是否有标准方法在搜索旁边添加复选框以选择(在运行时)要搜索的字段 我知道有AdminModel属性search\u fields=['one\u field','other\u field']等。但是对于这个项目,我需要在当时选择一个字段 任何想法欢迎!塔克斯 从文档中: 默认实现搜索ModelAdmin.search\u字段中指定的字段 此方法可能会被您自己的自定义搜索方法覆盖。例如,您可能希望按整数字段进行搜索,或者使用外部工具,如Solr或Haystack。必须确
search\u fields=['one\u field','other\u field']
等。但是对于这个项目,我需要在当时选择一个字段
任何想法欢迎!塔克斯 从文档中:
默认实现搜索ModelAdmin.search\u字段中指定的字段
此方法可能会被您自己的自定义搜索方法覆盖。例如,您可能希望按整数字段进行搜索,或者使用外部工具,如Solr或Haystack。必须确定搜索方法实现的queryset更改是否会在结果中引入重复项,并在返回值的第二个元素中返回True
例如,要启用按整数字段搜索,可以使用:
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)
except ValueError:
pass
else:
queryset |= self.model.objects.filter(age=search_term_as_int)
return queryset, use_distinct
添加您需要的逻辑Django Admin不为搜索字段提供自定义复选框,但您可以通过覆盖Django搜索来实现类似的功能。可以使用基于前缀的搜索 代码示例
class UserTimelineAdmin(admin.ModelAdmin):
list_display = ('user_screen_name','user_name', 'created_at',)
search_fields = ['user_screen_name','user_name']
def get_search_results(self, request, queryset, search_term):
new_queryset, use_distinct = super().get_search_results(request, queryset, search_term)
if search_term.startswith('screen_name-'):
search_term = search_term.replace('screen_name-','')
try:
new_queryset |= queryset.filter(user_screen_name=search_term)
except:
pass
elif search_term.startswith('user_name-'):
search_term = search_term.replace('user_name-','')
try:
new_queryset |= queryset.filter(user_name=search_term)
except:
pass
return new_queryset, use_distinct
- 将self.model.objects.filter替换为queryset.filter
- 添加了截图