我的模型如下
class Person:
name = models.CharField()
city = models.CharField()
phone = models.CharField()
我想在管理页面中创建一个过滤器,过滤器应该基于手机,即
valid phone(having 10 digits)
invalid phone
我不想创建验证。我只想过滤掉有效手机和无效手机的人。 谢谢
答案 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.根据您的具体需要修改它。
希望这有帮助。
祝你好运!