首页 > 其他 > 详细

Django表单(forms.ModelForm)

时间:2019-08-23 13:07:19      阅读:148      评论:0      收藏:0      [点我收藏+]

在定义forms.py表单的时候,很多字段信息是和models.py文件里的模型基本上是一模一样的,
为了避免重复的代码,我们引入了ModelForm,将模型和表单进行绑定,示例代码如下:
(用法和forms.Form表单一样)

1、models.py文件

from django.db import models
from django.core import validators

class Book(models.Model):
title = models.CharField(max_length=100)
page = models.IntegerField()
# price = models.FloatField()
# 可以直接在建表的时候单独给某个字段加验证器:限制价格不能超过1000
price = models.FloatField(validators.MaxValueValidator(limit_value=1000))

 


2、app新建forms.py文件

from django import forms # 注意是django下的forms
from one.models import Book


# 将表单AddBookForm与Book模型进行绑定
# 继承的是forms.ModelForm
class AddBookForm(forms.ModelForm):
# 单独控制某个字段,函数名固定格式,clean_字段名
def clean_page(self):
# 获取page字段
page = self.cleaned_data.get(page)
if page > 100:
raise forms.ValidationError("页数不能大于100!")

class Meta:
model = Book
fields = "__all__"
# fields = [‘title‘, ‘page‘]
# exclude = [‘price‘] # 除了price字段

# 自定义错误消息
error_messages = {
title: {
max_length: 最多不能超过10个字符!,
min_length: 最少不能少于3个字符!
},
content: {
required: 必须输入content!,
},
page: {
required: page参数必须字段,请传值,
invalid: 请输入一个可用的page参数
},
price: {
max_value: 图书价格不能超过1000

}

}

 


3、views.py视图函数

from django.http import HttpResponse
from django.shortcuts import render

from django.views.generic import View
from one.forms import AddBookForm

# 定义GET或者POST方法:根据是GET还是POST请求来做相应的操作
class IndexView(View):
# 如果是GET请求,那么返回一个空的表单
def get(self, request):
form = AddBookForm()
return render(request, one/index.html, {form: form})

# 如果是POST请求,那么将提交上来的数据进行校验
def post(self, request):
form = AddBookForm(request.POST)
if form.is_valid():
title = form.cleaned_data.get(title)
page = form.cleaned_data.get(page)
price = form.cleaned_data.get(price)
print(= * 30)
print(title)
print(page)
print(price)
print(= * 30)
# 在验证完成后直接调用save方法,就可以将这个数据保存到数据库中了
form.save()

return HttpResponse(表单验证成功)
else:
# 点上get_json_data()它,打印的错误信息会以json方式显示
print(form.errors.get_json_data())
return HttpResponse(表单验证失败)

 



4、路由

from django.urls import path
from .views import *

urlpatterns = [
path(index/, index, name=index),

path(‘‘, IndexView.as_view()),
]

 


5、index.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="" method="post">
<table>
{{ form.as_table }}
<tr>
<td></td>
<td><input type="submit" value="提交"></td>
</tr>
</table>
</form>
</body>
</html>

Django表单(forms.ModelForm)

原文:https://www.cnblogs.com/qinghe123/p/11398990.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!