python - Django 管理列表过滤器删除所有选项

标签 python django django-admin

正如您从下面的屏幕截图中看到的那样,当使用和自定义 django 管理过滤器时,如下所示:

class DealExpiredListFilter(admin.SimpleListFilter):
    title = 'expired'

    parameter_name = 'expired'

    def lookups(self, request, model_admin):
        return (
            ('yes', 'yes'),
            ('no', 'no'),
        )

    def queryset(self, request, queryset):
        if self.value() == "yes":
            return queryset.filter(end_date__lt=timezone.now())
        elif self.value() == "no":
            return queryset.exclude(end_date__lt=timezone.now())

Django 会在任何情况下插入一个“全部”选项(这对 %99 的时间来说很好)。 我想重命名或删除屏幕截图中可见的“全部”选项

scrrenshot

最佳答案

我最终通过浏览可以在 [here in this link][1] 中找到的源代码并覆盖 choices 函数解决了这个问题。在添加到我的过滤器类的代码中,我只更改了“全部”选项以显示"is":

from django.utils.encoding import force_text

def choices(self, changelist):
    """Copied from source code to remove the "All" Option"""
    yield {
        'selected': self.value() is None,
        'query_string': changelist.get_query_string({}, [self.parameter_name]),
        'display': 'Yes',
    }
    for lookup, title in self.lookup_choices:
        yield {
            'selected': self.value() == force_text(lookup),
            'query_string': changelist.get_query_string({self.parameter_name: lookup}, []),
            'display': title,
        }

正如 Linh 所提到的:对于只想删除所有选项的任何人,只需删除 'display': 'Yes',从 choices 函数中的第一个 yield{} [1]: https://github.com/django/django/blob/main/django/contrib/admin/filters.py#L44

关于python - Django 管理列表过滤器删除所有选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53821727/

相关文章:

javascript - 基于脚本进度的动态进度条?

Python nan 与复杂数组

python - Django GenericRelation 仍然没有启用从 GenericForeignKey 的反向查询

python - 覆盖率显示 Django 测试的百分比太低

python - 如何从 django 管理界面更改 django 中的模型名称?

django - 在 Django 的管理界面中添加换行符和标题

python - Django 员工用户仅管理他们自己创建的用户

python - 以整数形式获取 pandas 数据框行的索引

python - 非负整数组合的高效枚举

django - 适用于多对多字段的Django 1.2.1内联管理员