P33,用户添加错误提示
设置错误信息为中文,setting.py
几个小问题:
设置错误信息为中文:
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'en-hans'
把时间搞成可以点击选择的插件
<input type="date" />
在widgets入职时间中添加
attrs = {“type”: “Date”}s
views.py
from django import forms
class UserModelForm(forms.ModelForm):
# 设置校验条件
name = forms.CharField(min_length=3, label="用户名")
# password = forms.CharField()
class Meta:
model = models.UserInfo
fields = ['name', 'password', 'age', 'account', 'gender', 'department', 'create_time']
widgets = {
"create_time": forms.TextInput(attrs={'type': 'date'}),
}
# 可以用widgets 添加前端样式,可以用,比较麻烦
# widgets = {
# "name": forms.TextInput(attrs={'class': 'form-control'}),
# "password": forms.TextInput(attrs={'class': 'form-control'}),
# }
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for name, field in self.fields.items():
print(name, field)
# 跳过不加样式:
# if name == "password":
# continue
field.widget.attrs = {'class': 'form-control', 'placeholder': field.label}
def user_add_modelform(request):
if request.method == 'GET':
form = UserModelForm()
print(form)
return render(request, 'user_add_modelform.html', {"form": form})
else:
form = UserModelForm(data=request.POST)
if form.is_valid():
print(form.cleaned_data)
form.save()
return redirect('/user_list/')
else:
print(form.errors)
return render(request, 'user_add_modelform.html', {"form": form})
user_add_modelform.html
{% extends 'layout.html' %}
{# <h3>models添加用户</h3>#}
{# <form method="POST" action="/user_add_modelform/">#}
{# {% csrf_token %}#}
{# <div>#}
{# <p>手动写</p>#}
{# <p>{{ form.name.label }}{{ form.name }}</p>#}
{# <p>{{ form.password.label }}{{ form.password }}</p>#}
{# <p>{{ form.age.label }}{{ form.age }}</p>#}
{# </div>#}
{# <div>#}
{# <p>自动循环生成</p>#}
{# {% for field in form %}#}
{# <p>{{ field.label }}:{{ field }}</p>#}
{# {% endfor %}#}
{# </div>#}
{# <div>#}
{# </form>#}
{% block content %}
<div class="container">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">新建用户ModelForm</h3>
</div>
<div class="panel-body">
{# novalidate关闭浏览器校验#}
<form action="/user_add_modelform/" method="POST" novalidate>
{% csrf_token %}
{% for field in form %}
<div class="form-group">
<label>
{{ field.label }}
<span style="color: red">{{ field.errors.0 }}</span>
</label>
{{ field }}
</div>
{% endfor %}
<button type="submit" class="btn btn-default">提交</button>
</form>
</div>
</div>
</div>
{% endblock %}
P34,今日概要
ModelForm,针对数据库操作
Form,后面聊
编辑步骤:
点击编辑,传递ID
编辑页面,(默认数据,根据ID获取数据写入对应位置)
提交:
错误提示
数据校验
在数据库中更新
views.py
def user_edit(request, nid):
# 根据nid去数据库获取对应的数据
row_object = models.UserInfo.objects.filter(id=nid).first()
# 自动校验
form = UserModelForm(instance=row_object)
return render(request, 'user_edit.html', {'form': form})
user_add.html
{% extends 'layout.html' %}
{% block content %}
<div class="container">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">用户编辑</h3>
</div>
<div class="panel-body">
{# novalidate关闭浏览器校验#}
<form action="/user_add_modelform/" method="POST" novalidate>
{% csrf_token %}
{% for field in form %}
<div class="form-group">
<label>
{{ field.label }}
<span style="color: red">{{ field.errors.0 }}</span>
</label>
{{ field }}
</div>
{% endfor %}
<button type="submit" class="btn btn-default">提交</button>
</form>
</div>
</div>
</div>
{% endblock %}