文章目录
- 一、ModelForm是什么?
- 二、使用步骤
- 1.导入form库
- 2.定义自己的ModelForm
- 3.在自己的views.py里面定义自实列自己的ModelForm
- 4.如何用ModelForm更新字段
- 5.如何在前端模板中使用
- 总结
提示:以下是本篇文章正文内容,下面案例可供参考
ModelForm是一个强大的组件,可以在用户输入时做一些校验,也可以在下拉框做出一些提示
二、使用步骤 1.导入form库from django import forms
2.定义自己的ModelForm
class PrettyModelForm(forms.ModelForm):
class Meta:
model = models.PrettyNumber
fields = ['mobile', 'price', 'level']
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for name, field in self.fields.items():
field.widget.attrs = {'class': "form-control"}
__init__是初始化时,可以给输入框添加样式
3.在自己的views.py里面定义自实列自己的ModelFormdef prettyadd(request):
if request.method == 'GET':
form = PrettyModelForm()
return render(request, 'pretty_add.html', {'form': form})
form = PrettyModelForm(data=request.POST)
if form.is_valid():
form.instance.status = 2
form.save()
return render(request, 'pretty_add.html', {'form': form})
可以看到如果在定义类的时候,fields字段里面不是model类里面的所有字段,而在保存的时候又想保存一些不用用户自己输入的字段,就可以这样写form.instance.字段名 = ***, 这样就可以不用用户输入,也可以保存。
4.如何用ModelForm更新字段代码如下:
def useredit(request, id):
""" 用户编辑 """
row_obj = models.UserInfo.objects.filter(pk=id).first()
if request.method == "GET":
form = UserModelForm(instance=row_obj)
return render(request, 'user_edit.html', {'form': form})
form = UserModelForm(data=request.POST, instance=row_obj)
if form.is_valid():
form.save()
return redirect(reverse('userlist'))
return render(request, 'user_edit.html', {'form': form})
一样使用save方法,但通过POST传来数据时,需要在实列话时加一个instance=rowobj(数据库要更新的那一行)。
5.如何在前端模板中使用代码如下:
{% extends 'layout.html' %}
{% block content %}
新建用户
{% endblock %}
field.label是models的verbose_name, 而field可以自动的生成相应的输入框,而field.error.0是在界面生成相应的报错信息。
6.对输入进行格式匹配1.字段加正则
from django.core.validators import RegexValidator
class PrettyModelForm(forms.ModelForm):
mobile = forms.CharField(
label = '手机号',
validators=[RegexValidator(r'^\d{11}$', '数字要是手机号')],
)
class Meta:
model = models.PrettyNumber
fields = ['mobile', 'price', 'level']
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for name, field in self.fields.items():
field.widget.attrs = {'class': "form-control"}
2.钩子方法
总结
对ModelForm的相关总结
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)