django学习笔记

111 阅读2分钟

django学习笔记

djangobook.py3k.cn/2.0/chapter…

模型 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、数据表的增删改查

cloud.tencent.com/developer/a… —这篇文章更容易懂

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')