关于django:Django学习笔记010ModelForm相关

6次阅读

共计 1730 个字符,预计需要花费 5 分钟才能阅读完成。

1、获取数据

row_object = models.UserInfo.objects.filter(id=nid).first()
    if request.method == "GET":
        form = UserModelForm(instance=row_object)
        return render(request,'user_edit.html',{"form":form})

2、更新数据

ModelForm 实例参数:instance=row_object

form=UserModelForm(data=request.POST,instance=row_object)
    if form.is_valid():
        form.save()
        return redirect("/user/list/")
    return render(request,'user_edit.html',{"form":form})

3、数据排序 order_by

ASC(正序):models.PrettyNum.objects.all().order_by(“level”)
DESC(倒序):models.PrettyNum.objects.all().order_by(“-level”)

4、排除字段 exclude

# 全副字段
fields = "__all__"
#排除某一字段
exclude = ['level']

5、对用户提交的数据进行格局的校验

5.1 正则表达式
from django.core.validators import RegexValidator

class PrettyModelForm(forms.ModelForm):
    '''新建靓号'''
    mobile = forms.CharField(
        label="手机号",
        validators=[RegexValidator(r'^1[3-9]\d{9}$','手机号格局谬误')]
    )
    class Meta:
        model = models.PrettyNum
        # fields = ['mobile','price','level','status']
        fields = "__all__"
5.2 勾子办法

clean_字段名

    #验证办法 -2: 勾子办法
from django.core.exceptions import ValidationError


    def clean_mobile(self):
        txt_mobile = self.cleaned_data['mobile']
        
        if len(txt_mobile) != 11:
            #验证不通过
            raise ValidationError("格局谬误")
        #验证通过,返回用户输出的值 
        return txt_mobile

6、重定义 ModelForm

class PrettyEditModelForm(forms.ModelForm):
    '''编辑靓号,定义须要编辑的字段'''
    mobile = forms.CharField(disabled=True,label="手机号")
    class Meta:
        model = models.PrettyNum
        fields = ['mobile','price','level','status']


def pretty_edit(request,nid):
    '''编辑靓号'''
    row_object = models.PrettyNum.objects.filter(id=nid).first()
    if request.method == "GET":
        form = PrettyEditModelForm(instance=row_object) #如果只容许批改局部字段,须要为编辑性能独自写 ModelForm

6、查问判断反复字段

6.1 查问判断反复字段
exists = models.PrettyNum.objects.filter(mobile=XXXX).exists()
if exists:
    raise ValidationError("查问的字段已存在")
6.2 排除本身外的其余反复字段

self.instance.pk

exists = models.PrettyNum.objects.exclude(id=self.instance.pk).filter(mobile=XXXX).exists()
正文完
 0