在django管理员中,您可以为ModelAdmin设置search_fields,以便能够搜索那里给出的属性。我的模型类有一个属性不是真正的模型属性,意味着它不在数据库表中。该属性涉及另一个数据库表,该表不通过关系绑定到当前模型。 但我希望能够搜索它,所以我必须以某种方式自定义管理站点创建的查询,以便在搜索字段填满时进行过滤 - 这是否可能,如果,如何? 我可以查询我的自定义属性的数据库表,然后返回适合搜索的模型类的ID。然后,正如我所说,这必须流入管理站点搜索查询。
谢谢!
答案 0 :(得分:18)
从django 1.6开始,您可以通过在get_search_results
子类中定义ModelAdmin
方法来自定义搜索。
django documentation对此进行了详细解释。以下示例是从此文档中复制的。
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
答案 1 :(得分:0)
你应该使用search_fields = ['foreign_key__related_fieldname']
与管理类中的search_fields = ['user__email']
类似,扩展了admin.ModelAdmin
了解更多here
答案 2 :(得分:-2)
这可能会有所帮助
search_fields = ['foreign_key__related_fieldname']