标签:class cal 新建 objects 需要 接受 doctype turn err
Django表单提交一共有三种方式:
1.不使用Django组件进行提交
2.使用django.forms.Form(所有表单类的父类)进行提交
3.使用django.forms.ModelForm(可以和模型绑定的Form)进行提交
这里的例子是,给Publisher这个表里添加数据,表结构如下:
class Publisher(models.Model):
name = models.CharField("名称",max_length=30)
address = models.CharField("地址", max_length=50)
city = models.CharField("城市", max_length=60)
state_province = models.CharField("省份", max_length=30)
country = models.CharField("国家", max_length=50)
website = models.URLField("网址")
class Meta:
verbose_name = ‘出版商‘
verbose_name_plural = verbose_name
def __str__(self):
return self.name
urls.py里加入如下配置:
url(r‘^add_publisher/$‘, views.add_publisher, name=‘add_publisher‘),
一下代码着重介绍模版文件的编写和views.py文件的编写
html文件:\hello_django\hello\templates\add_publisher.html
views.py文件:\hello_django\hello\views.py
1.不使用Django组件进行提交
和普通的html提交没什么不同,后台views.py使用命令一个一个的接収参数,然后进行处理,需要自己进行数据校验,自己进行组装数据
html文件:自己写form表单
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>添加出版社信息</title>
</head>
<body>
<form action="{% url ‘add_publisher‘ %}" method="post">
{% csrf_token %}
名称:<input name="name" type="text" /><br>
地址:<input name="address" type="text" /><br>
城市:<input name="city" type="text" /><br>
省份:<input name="state_province" type="text" /><br>
国家:<input name="country" type="text" /><br>
网址:<input name="website" type="text" /><br>
<input type="submit" value="提交"><br>
</form>
</body>
</html>
views.py(自己接受数据,自己组装数据)
def add_publisher(request):
if request.method == "POST":
name = request.POST[‘name‘]
address = request.POST.get(‘address‘)
city = request.POST[‘city‘]
state_province = request.POST[‘state_province‘]
country = request.POST[‘country‘]
website = request.POST[‘website‘]
Publisher.objects.create(
name = name,
address = address,
city = city,
state_province = state_province,
country = country,
website = website,
)
return HttpResponse("添加出版社信息成功!")
else:
return render(request, ‘add_publisher.html‘, locals())
2.使用django.forms.Form(所有表单类的父类)进行提交
新建\hello_django\hello\forms.py文件,参数是forms.Form标识他是一个Form的子类
from django import forms
class PublisherForm(forms.Form):
name = forms.CharField(label="名称", error_messages={"required": "必填"})
address = forms.CharField(label="地址", error_messages={"required": "必填"})
city = forms.CharField(label="城市", error_messages={"required": "必填"})
state_province = forms.CharField(label="省份", error_messages={"required": "必填"})
country = forms.CharField(label="国家", error_messages={"required": "必填"})
website = forms.URLField(label="网址", error_messages={"required": "必填"})
html文件:这样不用自己写表单了
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>添加出版社信息</title>
</head>
<body>
<form action="{% url ‘add_publisher‘ %}" method="post">
{% csrf_token %}
{{ publisher_form.as_p }}
<input type="submit" value="提交"><br>
</form>
</body>
</html>
views.py文件:不用一个一个接受参数,也不用自己做参数校验了
def add_publisher(request):
if request.method == "POST":
publisher_form = PublisherForm(request.POST)
if publisher_form.is_valid():
Publisher.objects.create(
name = publisher_form.cleaned_data[‘name‘],
address = publisher_form.cleaned_data[‘address‘],
city = publisher_form.cleaned_data[‘city‘],
state_province = publisher_form.cleaned_data[‘state_province‘],
country = publisher_form.cleaned_data[‘country‘],
website = publisher_form.cleaned_data[‘website‘],
)
return HttpResponse("添加出版社信息成功!")
else:
publisher_form = PublisherForm()
return render(request, ‘add_publisher.html‘, locals())
3.使用django.forms.ModelForm(可以和模型绑定的Form)进行提交
新建\hello_django\hello\forms.py文件,参数是forms.ModelForm标识他是一个ModelForm的子类
from django import forms
from hello.models import Publisher
class PublisherForm(forms.ModelForm):
class Meta:
model = Publisher
exclude = ("id",)
views.py文件:不用一个一个接受参数,也不用自己做参数校验了,也不同自己创建对象
def add_publisher(request):
if request.method == "POST":
publisher_form = PublisherForm(request.POST)
if publisher_form.is_valid():
publisher_form.save()
return HttpResponse("添加出版社信息成功!")
else:
publisher_form = PublisherForm()
return render(request, ‘add_publisher.html‘, locals())
标签:class cal 新建 objects 需要 接受 doctype turn err
原文地址:http://www.cnblogs.com/413xiaol/p/6507389.html