由名称标识显示的django list_filter滤波器

时间:2019-01-30 10:19:28

标签: python django

目前在管理界面可以通过公司的名称而不是公司的实例在数据库中筛选项目。因为,这是不可能过滤掉一个具体公司的项目,如果有多家公司使用相同的名称。

请进行修复-可以按数据库中的实际公司来过滤项目(公司名称在过滤器选项中仍应可见。

list_filter = ('company__name',) 
#I change and become
list_filter = ('company__id',) 

但现在,过滤器显示的ID,但名称的需要。如何按名称显示但按ID过滤?

1 个答案:

答案 0 :(得分:0)

您可以定义custom filter class。这样的事情可能对您有用:

class CompanyListFilter(admin.SimpleListFilter):
    title = _('company')
    parameter_name = 'company_id'

    def lookups(self, request, model_admin):
        # generate the list of choices
        companies = Company.objects.all()
        return [(company.pk, company.name) for company in companies]

    def queryset(self, request, queryset):
        # filter the queryset by the selected value
        value = self.value()
        if value is not None:
            return queryset.filter(company_id=self.value())
        return queryset


class ProjectAdmin(admin.ModelAdmin):
    # add the filter to the admin instance
    list_filter = (CompanyListFilter,)