Django-model ORM

ORM

映射关系:

     表名  <-------> 类名

       字段  <-------> 属性

    表记录 <------->类实例对象

举例
#models.py 

from django.db import models
class Book(models.Model): # 类名就是表名 继承models.Model
    id=models.AutoField(primary_key=True) #主键 自增厚在那个
    title=models.CharField(max_length=32)#varchar(32)
    pubdate=models.DateField 
    price=models.DecimalField(max_digits=6,decimal_places=2)
    publish=models.CharField(max_length=32)
#启动命令
python manage.py makemigrations
python manage.py migrate

 贴个文件 感受一下用法

from django.shortcuts import render,HttpResponse,redirect

# Create your views here.


from app01 import models #这个需要导入
def index(request):

    #查询所有的书籍
    #models.Book.objects 这个就是管理表的管理器 表就通过这个 . 来管理
    #models.Book.objects.all() #返回值QuerySet 就是一个列表[obj1,obj2...]
                              # 每一条记录都是一个obj对象 对象可以通过 对象. 取值
                              # 类似于 select * from table;

    booklist=models.Book.objects.all()

    return render(request,'index.html',{'booklist':booklist})


def add(request):

    if request.method=='POST': ##这里是大写呀  亲
        print(request.POST) #<QueryDict: {'title': ['浅爱'], 'price': ['22'], 'publish': ['七七出版社'], 'pubdate': ['2017-09-08']}>
        #从request.POST里把数据取出来
        title=request.POST.get('title')
        price=request.POST.get('price')
        publish=request.POST.get('publish')
        pubdate=request.POST.get('pubdate')
        #插入数据 models里的title等于request.POST里取出的数据title
        models.Book.objects.create(title=title,price=price,publish=publish,pubdate=pubdate)
        # return  HttpResponse('OK')
        return redirect('/index/')
    return render(request,'add.html')

def delbook(request,id):
    #过滤 删除之前 需要过滤 过滤出要删除的项
    #models.Book.objects.filter(过滤条件)
    #这里有一个点 点击删除按钮  应该删除当前点击行
    #那又该如何锁定当前删除行呢

    models.Book.objects.filter(id=id).delete() #根据id过滤出来然后删除

    return  redirect('/index/') #这里 其实是刷新了一下  重定向是两次请求


def edit(request,id):
    ##这里有个点 除了根据id编辑当前行外 还有就是 点击编辑 弹出的编辑页面里,要带着以前的数据
    #先拿到当前编辑的行 然后才可以把数据拿出来展示在编辑栏里
    ##filter拿到的也是queryset [obj1,obj2] 拿到的是一个列表 通过索引 拿到的才是当前编辑的行 不是很懂 我觉得
    # 通过id就可以直接拿到当前编辑的行了呀
    # edit_book=models.Book.objects.filter(id=id)[0]
    # print(edit_book)
    # return render(request,'edit.html')
    if request.method=='POST':
        title = request.POST.get('title')
        price = request.POST.get('price')
        publish = request.POST.get('publish')
        pubdate = request.POST.get('pubdate')
        models.Book.objects.update(title=title, price=price, publish=publish, pubdate=pubdate)
        return  redirect('/index/')

    edit_book = models.Book.objects.filter(id=id)[0]  # 返回值QuerySet    [obj1,]
    return render(request, "edit.html", {"edit_book": edit_book})  #只要渲染数据 就加第三个参数 不加 页面上怎么会有内容呢 流程还是不清晰

 

posted @ 2017-11-09 17:59  lazyball  阅读(210)  评论(0编辑  收藏  举报