繁体   English   中英

Django admin中的自定义过滤器

[英]Custom Filter in Django admin

我有一个模型如下

class Person:
  name = models.CharField()
  city = models.CharField()
  phone = models.CharField()

我想在管理页面中创建一个过滤器,该过滤器应基于电话,即

valid phone(having 10 digits)
invalid phone

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

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

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}$')

然后将列表过滤器类包括在模型管理员的list_filter中。

class PersonAdmin(admin.ModelAdmin):
    list_filter = (ValidPhoneListFilter,)

你可以做类似的事情

from django.core.validators import RegexValidator

phone_regex = RegexValidator(r'^[0-9]{10}$', 'Invalid phone number')

在你的模型中

phone = models.CharField(validators=[phone_regex])

此正则表达式仅检查它是否为数字并且长度是否为10。请根据您的特定需求进行修改。

希望这可以帮助。

祝好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM