django学习笔记

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') 
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值