class BookModelForm(forms.ModelForm):
class Meta:
model=Book
labels={'price':'零售价格'}
exclude=('retail_price')
ModelForm 需要使用 Meta 来设置必要的元数据信息,这样 Model 的元数据项不谋而合,我们在 Meta 中设置三个选项:model 指定了需要生成表单的模型对象;labels 为字典类型,用于定义表单字段的名称,当然这里大家需要注意一下,表单的名称首先默认使用 Model字段设置的 verbose_name,但是若 Model 字段没有设置该字段选项,则就可以使用 lables 设置的字段名;exclude 标识不需要在表单中显示的字段,这和 Model 的 Meta 也一样。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户添加</title>
</head>
<body>
<form action="" method="post">
{% csrf_token %}
<table>
{{ form }}
</table>
<input type="submit" value="提交">
</form>
</body>
</html>
上面代码有两个需要注意的地方:由于指定了 POST 请求类型,需要 CSRF 保护机制,所以添加了 {%csrf_token%} 模板标签;action 没有设定 URL 的意思是将表单提交到与当前页面相同的 URL。接下来实现 UserModelForm 并在视图函数中应用它,代码如所示:
#forms.py编写
class UserModelForm(forms.ModelForm):
class Meta:
model=UserInfo
fields="__all__"
widgets={'password':widgets.PasswordInput()}
#views.py编写
def user_add_form(request):
if request.method=="Post":
user=UserModelForm(request.Post)
if user.is_valid():
user=UserInfo.objects.create(username=user.cleaned_data['username'],
password=user.cleaned_data["password"],
gender=user.cleaned_data['gender'])
#user_add.html只需要接收变量{{ user }}即可
return render(request,'index/user_add.html',locals())
else:
return render(request,'index/useradd_model_form.html',context={'form':user})
else:
return render(request,'index/useradd_model_form.html',{'form':UserModelForm()})
#urls.py编写
urlpatterns=[path('user_add_form/',views.user_add_form)]
最后访问 127.0.01:8000/index/user_add_form/ 可得如下页面:
版权说明:Copyright © 广州松河信息科技有限公司 2005-2025 版权所有 粤ICP备16019765号
广州松河信息科技有限公司 版权所有