编程语言
首页 > 编程语言> > python - 编辑数据- 修改手机号-已存在禁止录入 - 校验

python - 编辑数据- 修改手机号-已存在禁止录入 - 校验

作者:互联网

'''为靓号编辑 设立一个类'''
class NumberEditModelForm(forms.ModelForm):

    # 限制修改字段  注意mobile 字段放的位置
    # mobile = forms.CharField(disabled=True, label='号码')

    # 重新定义一次 手机号的格式问题
    mobile = forms.CharField(
        label='手机号',
        validators = [RegexValidator(r'^1[3-9]\d{9}$', '手机号格式错误')],
    )

    class Meta:
        model = models.Number
        fields = ['mobile', 'price', 'ji', 'zhuang']

        # 重定义方法 添加input 样式
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # 循环出所有字段, 并用插件 插入 clas 样式
        for name, field in self.fields.items():
            # if name == 'name':
            #     continue
            field.widget.attrs = {"class": "form-control", "placeholder": field.label}

    # 方法2  钩子方法  clean_字段名(self)
    # 校验已经存在的手机号 禁止入库
    def clean_mobile(self):
        #  self.instance.pk 显示主键id

        # 获取用户传入的数据
        text_mobile = self.cleaned_data['mobile']
        # exists() 验证手机号是否存在
        exists = models.Number.objects.exclude(id=self.instance.pk).filter(mobile=text_mobile).exists()
        if exists:
            # 使用 ValidationError 需要引入 from django.core.exceptions import ValidationError
            # 验证不通过
            raise ValidationError('手机号已经存在')

        # 验证通过
        return text_mobile


'''编辑靓号'''
def number_edit(request, nid):
    row_obj = models.Number.objects.filter(id=nid).first()
    if request.method == 'GET':
        form = NumberEditModelForm(instance=row_obj)
        return render(request, 'number_edit.html', {'form':form})
    form = NumberEditModelForm(data=request.POST, instance=row_obj)
    if form.is_valid():
        # 如果想额外保存其他字段方法 form.instance.字段名 = 值
        form.save()
        return redirect('/number/list')
    #校验不合法返回当前页面
    return render(request, 'number_edit.html', {'form':form})

 

标签:手机号,form,instance,python,self,request,校验,mobile,录入
来源: https://www.cnblogs.com/longly1111/p/16121565.html