时间:2010-06-17 06:32:27

标签: python django django-admin

在django管理员中,您可以为ModelAdmin设置search_fields,以便能够搜索那里给出的属性。我的模型类有一个属性不是真正的模型属性,意味着它不在数据库表中。该属性涉及另一个数据库表,该表不通过关系绑定到当前模型。 但我希望能够搜索它,所以我必须以某种方式自定义管理站点创建的查询,以便在搜索字段填满时进行过滤 - 这是否可能,如果,如何? 我可以查询我的自定义属性的数据库表,然后返回适合搜索的模型类的ID。然后,正如我所说,这必须流入管理站点搜索查询。

谢谢!

3 个答案:

答案 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']

http://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.search_fields