如何在 django admin 中使用自定义字段进行搜索

Exp*_*tor 7 python django django-admin

我有一个模型并已注册到管理员,并且我已使用自定义字段显示在列表中

class ReportsAdmin(admin.ModelAdmin):
    def investment(self, inst):
        return models.OrderDetail.objects.filter(user=inst.user).distinct().count()

    list_display = ['investment']
    search_fields = ['investment']
Run Code Online (Sandbox Code Playgroud)

我想使用investmentdjango admin 中的字段进行搜索,但总是得到Cannot resolve keyword 'investment' into field.选择的是模型字段。

有什么方法可以使用该investment字段进行搜索吗?

dai*_*no3 10

在软件中,一切皆有可能......接受答案的SMH。你必须覆盖get_search_results.

from django.db.models import Count

class ReportsAdmin(admin.ModelAdmin):
    def investment(self, inst):
        return models.OrderDetail.objects.filter(user=inst.user).distinct().count()

    list_display = ['investment']
    search_fields = ['investment']

    def get_search_results(self, request, queryset, search_term):
        # search_term is what you input in admin site
        search_term_list = search_term.split(' ')  #['apple','bar']

        if not any(search_term_list):
            return queryset, False

        if 'investment' in search_term_list:
           queryset = OrderDetail.objects.annotate(
               user_count=Count('user')
           ).filter(user_count__gte=search_term_list['investment'])

        return queryset, False
Run Code Online (Sandbox Code Playgroud)