自定义Django adminsite搜索字段查询
在Django的管理后台,你可以设置search_fields,让你能够根据指定的属性进行搜索。我的模型类有一个属性,但这个属性并不是一个真正的模型属性,也就是说,它不在数据库表里。这个属性和另一个数据库表有关,但这个表和当前模型没有直接的关系。
不过,我希望能够对这个属性进行搜索,所以我需要以某种方式自定义管理后台生成的查询,以便在填写搜索字段时进行过滤——这可能吗?如果可以的话,应该怎么做呢?
我可以查询我自定义属性的数据库表,然后返回符合搜索条件的模型类的ID。然后,正如我所说的,这些ID需要融入到管理后台的搜索查询中。
谢谢!
3 个回答
-2
这可能会对你有帮助
search_fields = ['foreign_key__related_fieldname']
-1
你应该在扩展了 admin.ModelAdmin 的管理类中使用 search_fields = ['foreign_key__related_fieldname']
,就像 search_fields = ['user__email']
这样。
想了解更多,可以点击 这里。
32
从Django 1.6开始,你可以通过在你的ModelAdmin
子类中定义一个get_search_results
方法来定制搜索功能。
这个内容在Django的官方文档中解释得很清楚。下面的例子是从这个文档中复制过来的。
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