Django 管理中的自定义过滤器

pot*_*ato 2 python django admin filter

我有一个模型如下

class Person:
  name = models.CharField()
  city = models.CharField()
  phone = models.CharField()
Run Code Online (Sandbox Code Playgroud)

我想在管理页面创建一个过滤器,过滤器应该是基于手机的,也就是

valid phone(having 10 digits)
invalid phone
Run Code Online (Sandbox Code Playgroud)

我不想创建验证。我只想过滤掉谁拥有有效电话和无效电话。谢谢

Ala*_*air 6

创建自定义列表过滤器类。文档中有一个示例 ,可用于您的案例。

from django.contrib import admin

class ValidPhoneListFilter(admin.SimpleListFilter):
    # Human-readable title which will be displayed in the
    # right admin sidebar just above the filter options.
    title = _('valid phone')

    parameter_name = 'valid_phone'

    def lookups(self, request, model_admin):
        return (
            ('valid', _('valid phone')),
            ('invalid', _('invalid phone')),
        )

    def queryset(self, request, queryset):
        if self.value() == 'valid':
            return queryset.filter(phone__regex=r'^\d{10}$')
        if self.value() == 'invalid':
            return queryset.exclude(phone__regex=r'^\d{10}$')
Run Code Online (Sandbox Code Playgroud)

然后list_filter为您的模型管理员包含您的列表过滤器类。

class PersonAdmin(admin.ModelAdmin):
    list_filter = (ValidPhoneListFilter,)
Run Code Online (Sandbox Code Playgroud)