1. 程式人生 > 其它 >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})