Django管理员中的自定义过滤器

时间:2017-08-08 09:22:13

标签: python django filter admin

我的模型如下

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

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

valid phone(having 10 digits)
invalid phone

我不想创建验证。我只想过滤掉有效手机和无效手机的人。 谢谢

2 个答案:

答案 0 :(得分:4)

创建自定义列表过滤器类。有一个example in the docs  这可以用于你的案件。

/^\S+\s\S+$/

然后在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

答案 1 :(得分:1)

您可以执行类似

的操作
from django.core.validators import RegexValidator

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

在你的模特中

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

此正则表达式仅检查它是否为数字且长度为10.根据您的具体需要修改它。

希望这有帮助。

祝你好运!