管理系统基于form的增加修改
管理系统form表单的坑1
管理系统form表单的坑2
管理系统基于form的增加修改
增加
add.html
代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form class="form-horizontal templatemo-container templatemo-login-form-1 margin-bottom-30" method="post" novalidate role="form">
{% csrf_token %}
<p id="hostname">阿里云主机名:{{ form.hostname }}{{ form.errors.hostname.0 }}</p>
<p id="ecsname">阿里云实例ID:{{ form.ecsname }}{{ form.errors.ecsname.0 }}</p>
<p id="cpu">CPU:{{ form.cpu }}{{ form.errors.cpu.0 }}</p>
<p id="mem">内存/G:{{ form.mem }}{{ form.errors.mem.0 }}</p>
<p id="speed">带宽/M:{{ form.speed }}{{ form.errors.speed.0 }}</p>
<p id="network">IP:{{ form.network }}{{ form.errors.network.0 }}</p>
<p id="source">来源类型:{{ form.source\_id }}{{ form.errors.source\_id.0 }}</p>
<p id="region">所属区域:{{ form.region\_id }}{{ form.errors.region\_id.0 }}</p>
{# <p id="disks">磁盘:{{ form.disks\_id }}{{ form.errors.disks\_id.0 }}</p>#}
<input type="submit" value="提交">
</form>
</body>
</html>
增加代码
class Add(View):
def post(self,request,\*args,\*\*kwargs):
# print(request.POST)
form=form_class.HostForm(data=request.POST)
if form.is_valid():
# form.cleaned\_data\['source'\]=int(form.cleaned\_data\['source'\])
models.Host.objects.create(**form.cleaned_data)
# print('提交正常')
return redirect('/host/list')
else:
print('错误信息',form.errors)
return render(request,'add.html',locals())
修改
edit.html
代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form class="form-horizontal templatemo-container templatemo-login-form-1 margin-bottom-30" method="post" novalidate role="form">
{% csrf_token %}
<p id="hostname">阿里云主机名:{{ form.hostname }}{{ form.errors.hostname.0 }}</p>
<p id="ecsname">阿里云实例ID:{{ form.ecsname }}{{ form.errors.hostname.0 }}</p>
<p id="cpu">CPU:{{ form.cpu }}{{ form.errors.cpu.0 }}</p>
<p id="mem">内存/G:{{ form.mem }}{{ form.errors.mem.0 }}</p>
<p id="speed">带宽/M:{{ form.speed }}{{ form.errors.speed.0 }}</p>
<p id="network">IP:{{ form.network }}{{ form.errors.network.0 }}</p>
<p id="source">来源类型:{{ form.source\_id }}{{ form.errors.source\_id.0 }}</p>
<p id="region">所属区域:{{ form.region\_id }}{{ form.errors.region\_id.0 }}</p>
{# <p id="disks">磁盘:{{ form.disks\_id }}{{ form.errors.disks\_id.0 }}</p>#}
<input type="submit" value="提交">
</form>
</body>
</html>
修改代码
class Update(View):
def post(self,request,pk):
print(pk)
form = form_class.HostForm(data=request.POST)
if form.is_valid():
print(form.cleaned_data)
models.Host.objects.filter(id=pk).update(**form.cleaned_data)
# print('提交正常')
return redirect('/host/list')
else:
print(form.errors)
return render(request, 'edit.html', locals())
def get(self,request,pk):
print(pk)
# get_id=int(request.GET.get('id'))
obj=models.Host.objects.filter(id=pk).first() #queset 类型
# obj=models.Host.objects.filter(id=get\_id) # queset\_list类型,但是只有一个值 \[1,\]
#没写完
form=form_class.HostForm(
initial={'hostname':obj.hostname,
'ecsname':obj.ecsname,
'cpu':obj.cpu,
'mem':obj.mem,
'speed':obj.speed,
'network':obj.network,
'source\_id':obj.source\_id,
'region\_id':obj.region\_id,
}
)
return render(request,'edit.html',locals())
删除
删除代码
class Del(View):
def post(self,request,\*args,\*\*kwargs):
pass
def get(self,request,\*args,\*\*kwargs):
get_id = int(request.GET.get('id'))
# get_id=int(request.GET.get('id'))
models.Host.objects.filter(id=get_id).delete()
return redirect('host/list')
host[urls.py](http://urls.py)
代码
from django.conf.urls import url,include
from django.contrib import admin
from host import views
urlpatterns = \[
url(r'list$', views.List.as_view()),
url(r'add$', views.Add.as_view()),
url(r'edit/(\\d+)/', views.Update.as_view()),
url(r'del', views.Del.as_view()),
\]
管理系统form表单的坑1
form_class.py
代码
from django.forms import fields
from django.forms import widgets
from django.forms import Form
from django.core.exceptions import ValidationError
from demo01 import models
class HostForm(Form):
hostname=fields.CharField(
# required=True,
# error_messages={'required': '不能为空'},
widget=widgets.TextInput(attrs={'class': 'form-control'})
)
ecsname=fields.CharField(
# required=True,
# error_messages={'required':'不能为空'},
widget=widgets.TextInput(attrs={'class': 'form-controls'})
)
cpu=fields.IntegerField(
required=True,
# error_messages={'required': '不能为空','invalid':'输入不合规'},
widget=widgets.TextInput(attrs={'class': 'form-control'})
)
mem = fields.IntegerField(
required=True,
# error_messages={'required': '不能为空','invalid':'输入不合规'},
widget=widgets.TextInput(attrs={'class': 'form-control'})
)
speed = fields.CharField(
required=True,
# error_messages={'required': '不能为空','invalid':'输入不合规'},
widget=widgets.TextInput(attrs={'class': 'form-control'})
)
network = fields.CharField(
required=True,
# error_messages={'required': '不能为空','invalid':'输入不合规'},
widget=widgets.TextInput(attrs={'class': 'form-control'})
)
source_id=fields.ChoiceField(
required=True,
# initial=0,
choices=\[\], #\[(id,name),(id,name)\]
widget=widgets.Select(attrs={'class': 'form-control'})
)
region_id = fields.ChoiceField(
required=True,
# initial=0,
choices=\[\],
widget=widgets.Select(attrs={'class': 'form-control'})
)
# disks_id = fields.MultipleChoiceField(
# required=True,
# choices=\[\],
# widget=widgets.SelectMultiple(attrs={'class': 'c1'})
# )
def \_\_init\_\_(self,\*args,\*\*kwargs):
super(HostForm,self).\_\_init\_\_(\*args,\*\*kwargs)
self.fields\['source\_id'\].choices=models.Source.objects.values\_list('id','name')
self.fields\['region\_id'\].choices=models.Region.objects.values\_list('id','name')
# self.fields\['disks\_id'\].choices=models.Disk.objects.values\_list('id','size')
widget=widgets.Select(attrs={'class': 'form-control'}) select 下拉列表
def \_\_init\_\_(self,\*args,\*\*kwargs):
super(HostForm,self).\_\_init\_\_(\*args,\*\*kwargs)
self.fields\['source\_id'\].choices=models.Source.objects.values\_list('id','name')
self.fields\['region\_id'\].choices=models.Region.objects.values\_list('id','name')
每做一个form类的 时候都会执行,这样在添加id ,name时不需要重新启动,就能出现新的下来选项
一对多关系,不能直接写死,需要__init__初始化
{{ form.errors.hostname.0 }} .0取列表的第一个值
add.html
代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form class="form-horizontal templatemo-container templatemo-login-form-1 margin-bottom-30" method="post" novalidate role="form">
{% csrf_token %}
<p id="hostname">阿里云主机名:{{ form.hostname }}{{ form.errors.hostname.0 }}</p>
<p id="ecsname">阿里云实例ID:{{ form.ecsname }}{{ form.errors.ecsname.0 }}</p>
<p id="cpu">CPU:{{ form.cpu }}{{ form.errors.cpu.0 }}</p>
<p id="mem">内存/G:{{ form.mem }}{{ form.errors.mem.0 }}</p>
<p id="speed">带宽/M:{{ form.speed }}{{ form.errors.speed.0 }}</p>
<p id="network">IP:{{ form.network }}{{ form.errors.network.0 }}</p>
<p id="source">来源类型:{{ form.source\_id }}{{ form.errors.source\_id.0 }}</p>
<p id="region">所属区域:{{ form.region\_id }}{{ form.errors.region\_id.0 }}</p>
{# <p id="disks">磁盘:{{ form.disks\_id }}{{ form.errors.disks\_id.0 }}</p>#}
<input type="submit" value="提交">
</form>
</body>
</html>
<form class="form-horizontal templatemo-container templatemo-login-form-1 margin-bottom-30" method="post" novalidate role="form">
novalidate 不显示浏览器自带的渲染信息
没有novalidae
{% csrf_token %} 把csrf token增加到表单中,不需要在setting中注释掉**'django.middleware.csrf.CsrfViewMiddleware'**,
管理系统form表单的坑2
veiws.py
add 代码
class Add(View):
def post(self,request,\*args,\*\*kwargs):
# print(request.POST)
form=form_class.HostForm(data=request.POST)
if form.is_valid():
# form.cleaned\_data\['source'\]=int(form.cleaned\_data\['source'\])
models.Host.objects.create(**form.cleaned_data)
# print('提交正常')
return redirect('/host/list')
else:
print('错误信息',form.errors)
return render(request,'add.html',locals())
return render(request,'add.html',locals()) locals 把函数中的所有变量都传过去
source_id 可以避免插入数据值类型的问题 id 是自增数字,不能是字符串