前面讲了模板也就是数据库的创建,那么如何对这些数据库进行更新呢,道理也是根据url中的信息。
http://127.0.0.1:8001/create/?name=zhf&age=30
输入如下地址,其中name=zhf,age=30.
Person2的模板如下:包含name和age两个字段。
class Person2(models.Model): name=models.CharField(max_length=40) age=models.IntegerField() def __unicode__(<span lang="EN-US" style="" font-size:"="">self): return self.name
url中添加如下的链接:url(r'^create/$',views.create),
views中代码如下:首先从网页中得到name和age两个参数。然后创建数据库,有如下几种方法:
方法1:
p2=Person2.objects.create(name=name1,age=age1)
方法2: p2=Person2(name=name1,age=age1) p2.save
方法3: p2=Person2() p2.name=name1 p2.age=age1 p2.save()
方法4:这个方法首先判断是否存在,如果存在则返回True,否则返回False ret=Person2.objects.get_or_create(name=name1,age=age1)
代码如下
def create(request): name1=request.GET['name'] age1=request.GET['age'] p2=Person2.objects.create(name=name1,age=age1) result=Person2.objects.filter(name=name1) return render(request,'index.html',{'ret':result})
最终的网页代码显示如下:Person2.objects.filter(name=name1)是一个过滤函数,可以看到显示创建了一个Person2的实例
上面的是创建函数,可以单独写一个查询的函数:注意这里使用的是Person2.objects.get而不是filter。是因为get是用来获取一个对象的,如果需要查找全部的人,则用filter, 所以filter返回的是一个集合。
def inquery_infor(request): name1=request.GET['name'] result=Person2.objects.get(name=name1) age=result.age return render(request,'index.html',{'age':age})
查询结果如下:
如果用filter的方法,则会报错:
def inquery_infor(request): name1=request.GET['name'] result=Person2.objects.filter(name=name1) age=result.age return render(request,'index.html',{'age':age})
提示QuerySet对象没有age属性
代码改成如下就OK了:
age=[]
for p in Person2.objects.filter(name=name1): age.append(p.age)
结果如下:
下面的语句可以用来删除掉对应的数据库
for p in Person2.objects.filter(name="zhf"):
p.delete()
网页中返回多个参数只能用如下的方式:
return render(request,'home.html',{'table_test':table_test,"age_show":age_show})
而不能用:在render中只能用一个字典。
return render(request,'home.html',{'table_test':table_test},{"age_show":age_show})
前面的查找其实内部都是用的数据库语言,也可以查看对应查询数据库的语言:
ret=Person2.objects.filter(name=name1).query
后面会接续介绍模型的其他功能