请选择 进入手机版 | 继续访问电脑版
搜索
房产
装修
汽车
婚嫁
健康
理财
旅游
美食
跳蚤
二手房
租房
招聘
二手车
教育
茶座
我要买房
买东西
装修家居
交友
职场
生活
网购
亲子
情感
龙城车友
找美食
谈婚论嫁
美女
兴趣
八卦
宠物
手机

123.ModelForm的使用

[复制链接]
查看: 96|回复: 0

3万

主题

3万

帖子

9万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
92768
发表于 2020-2-15 08:16 | 显示全部楼层 |阅读模式
ModelForm

在我们的实例中,必要经过models.py中界说相关的模子字段,以后在forms.py中一样必要界说每个字段举行响应的考证,这样的话,我们会必要反复界说,这样的话,就相对照力麻烦,所以为了简化我们的操纵。我们可以操纵ModelForm,将两者举行结合。

1.models.py文件中示例代码以下:
  1. from django.db import modelsfrom django.core import validatorsclass User(models.Model):    username = models.CharField(max_length=100)    password = models.CharField(max_length=24)    telephone = models.CharField(max_length=11, validators=[validators.RegexValidator(r"1[345678]\d{9}")])    class Meta:        db_table = 'user'
复制代码
2.forms.py文件中间接指定model 这个属性的值,而且指定fields="all",便可以将model模子中的全数字段都复制过来,可以在提交表单的时候举行考证,示例代码以下:
  1. from django import formsfrom .models import Userclass UserForm(forms.ModelForm):    class Meta:        model = User        # field可以指定在举行表单考证的时候,该模子中界说的字段中有哪个字段参数了考证        # “__all__:方式可以指定该模子中全数的字段都必要举行考证”        # 一样,也可以操纵列表指定模子中的一部分字段加入考证,        # 假如加入考证的字段比力多,而不加入考证的字段比力少的话,便可以操纵exclude举行断根不加入考证的字段        fields = '__all__'        # field = ['username','telephone']        # exclude = ['price']                error_messages = {            'username': {                'invalid':'输入的用户名无效',                'required': '请输入用户名',                'max_length': '最大长度不能超出100',            },            'password': {                'invalid': '输入的密码不合适要求',                'required': '请输入密码',            },            'telephone': {                'invalid': '输入的手机号无效',                'required': '输动手机号',            },        }
复制代码
3.在views.py文件中界说视图函数(在这里只是界说采纳POST请求向数据库提交数据,假如提交的数据正当,就会保存到数据库中,假如不正当,就会打印出相关的毛病信息),示例代码以下:
  1. from django.shortcuts import renderfrom django.http import HttpResponsefrom .models import Userfrom .forms import UserForm# 采纳POST请求拜候User表,举行提交数据def user_view(request):        form = UserForm(request.POST)        if form.is_valid():                                                                    form.save()        return HttpResponse('success')    else:                print(form.errors.get_json_data())        return HttpResponse('FAIL')
复制代码
在Postman中可以采纳POST请求提交相关字段的信息,一样可以保存到数据库中。

在我们注册的时候我们必要,传入username,pwd1(密码),pwd2(确认密码),telephone,而在我们的模子User中只要username,password,telephone,所以在我们的数据库中只必要存储username,password,telephone便可以了。可是在我们的views.py文件中我们还想要间接操纵form.save()举行提取数据和保存到数据库中,应当怎样操纵呢???

views.py文件中示例代码以下:
  1. from django.views.decorators.http import required_POST# 操纵装潢器required_POST,界说只能操纵POST请求拜候该视图@require_POSTdef register_view(request):    form = registerForm(request.POST)    if form.is_valid():            user = form.save(commit=False)        print(type(user))                        user.password = form.cleaned_data.get('pwd1')        user.save()        return HttpResponse('success')    else:            print(form.get_errors())        return HttpResponse('Fail')
复制代码
同时要在forms.py文件中增加以下代码:
  1. # 留意这里必定如果继续forms.ModelFormclass registerForm(forms.ModelForm):    # 重写两个字段举行考证    pwd1 = forms.CharField(max_length=24, min_length=6)    pwd2 = forms.CharField(max_length=24, min_length=6)    class Meta:        model = User        fields = ['username','telephone']    def get_errors(self):        new_errors = {}        errors = self.errors.get_json_data()        for key,message_dicts in errors.items():            messages = []            for message_dict in message_dicts:                message = message_dict['message']                messages.append(message)            new_errors[key] = messages        return new_errors    def clean(self):        clean_data = super().clean()        pwd1 = clean_data.get('pwd1')        pwd2 = clean_data.get('pwd2')        # 判定两次输入的密码能否同等        if pwd1 != pwd2:            raise forms.ValidationError('两次密码输入不同等!')        return clean_data
复制代码
在Postman中采纳POST请求提交数据
我的关键词 123.ModelForm的利用  热门消息 20200215071943579

在数据库及第行检察,数据已经增加到数据库中了:
我的关键词 123.ModelForm的利用  热门消息 20200215071953177


免责声明:假如加害了您的权益,请联系站长,我们会实时删除侵权内容,感谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2006-2014 WAYSFOCUS 影像 你 我 他,中国商业影视一站式解决平台 版权所有 法律顾问:高律师 客服电话:0791-88289918
技术支持:迪恩网络科技公司  Powered by Discuz! X3.2
快速回复 返回顶部 返回列表