django学习笔记
http://djangobook.py3k.cn/2.0/chapter05/
文章目录
模型 models.py
1、定义数据模型
from django.db import models
class Publisher(models.Model):
name = models.CharField(max_length=128) # 出版社名称
2、模型安装
INSTALLED_APPS = (
'mysite.books', // books这里是你app名字
)
3、创建数据表
python manage.py validate -检查模型的有效性
python manage.py sqlall books --生成shell语句
python manage.py syncdb --执行shell语句
4、数据表的增删改查
https://cloud.tencent.com/developer/article/1774570 —这篇文章更容易懂
4.1 增加
这里其实有两步:1、创建一个对象 2、调用save
models.Publisher.objects.create(name="新华出版社")
4.2 删除
models.Publisher.objects.filter(name="清华大学出版社").delete()
Publisher.objects.all().delete() # 删除全部
4.3 修改
使用sava方法去修改,会修改所有列
obj = models.Publisher.objects.get(id=id) #先查询
obj.name = name # 在内存中修改
obj.save() # 将修改保存到数据库
使用updata去修改,下面这种方法只会修改1列
>>> Publisher.objects.filter(id=52).update(name='Apress Publishing')
4.4 查询
obj1 = models.Publisher.objects.get(name="新华出版社") #返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。
obj2 = models.Publisher.objects.filter(name="新华出版社") #它包含了与所给筛选条件相匹配的对象,返回的是一个对象,如果查询不到,那么返回的是空列表,不报错。
obj3 = models.Publisher.objects.filter(name="新华出版社").first() #返回与之匹配的第一个对象,如果没有,则返回空。
obj4 = models.Publisher.objects.all() #获取表中所有数据
4.5 模糊查询
4.6 排序&连锁查询
>>> Publisher.objects.order_by("name")
>>> Publisher.objects.order_by("address")
此外,Django让你可以指定模型的缺省排序方式:
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()
def __unicode__(self):
return self.name
**class Meta:**
**ordering = ['name']**
连锁查询
>>> Publisher.objects.filter(country="U.S.A.").order_by("-name")
4.7 限制返回数据
Publisher.objects.order_by('name')[0] --相当于limit1
5、模型使用实战
from django.shortcuts import render, redirect
from app01 import models
# Create your views here.
def publisher_list(request):
obj = models.Publisher.objects.all() # 查数据
return render(request, 'publisher_list.html', {'publisher_list': obj}) # {'publisher_list': obj}是模板,可以传递给前端页面。
def publisher_add(request):
if request.method == "POST":
pub_name = request.POST.get('pub_name')
if not pub_name:
return render(request, 'publisher_add.html', {'error': "出版社名字不能为空"})
if models.Publisher.objects.filter(name=pub_name):
return render(request, 'publisher_add.html', {'error': "出版社已经存在"})
models.Publisher.objects.create(name=pub_name) # 增加出版社,使用create方法
return redirect('/publisher_list/')
return render(request, 'publisher_add.html')。
def publisher_del(request):
pk = request.GET.get('id')
models.Publisher.objects.filter(id=pk).delete() # 删除数据库中的数据
return redirect('/publisher_list/')
def publisher_edit(request):
id = request.GET.get('id')
obj1 = models.Publisher.objects.get(id=id)
if request.method == "GET":
return render(request, 'publisher_edit.html', {'pub_obj': obj1})
else:
name = request.POST.get('pub_name')
obj2 = models.Publisher.objects.filter(name=name)
if obj2:
return render(request, 'publisher_edit.html', {'msg': "该出版社已存在"})
else:
obj1.name = name # 在内存中修改
obj1.save() # 将修改保存到数据库
return redirect('/publisher_list')