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号
广州京杭网络科技有限公司 版权所有