Django ORM单表操作

讲解以下面表结构为例

Django ORM单表操作_第1张图片

单表的增删改查

               1. 删和改
                  1. GET请求 URL传值
                       1. 格式
                          127.0.0.1:8000/delete_publisher/?name=alex&id=7
                       2. Django后端取值
                            request.GET   --> 大字典
                           request.GET["name"]/request.GET["id"]   --> key不存在就报错了
                           request.GET.get("name", "sb")           --> 推荐用这个方法取值
                    
             2. 复习一下POST方法提交的数据怎么取:
                      request.POST.get("key")
            3. ORM操作
                1. 删除
                    1. 先找到对象,调用对象的.delete()方法
                        publisher_obj = models.Publisher.objects.get(id=7)
                        publisher_obj.delete()
                    或者
                        models.Publisher.objects.get(id=7).delete()
                
                2. 修改
                    1. 找到对象,通过修改对象的属性来修改数据库中指定字段的值,要保存
                        publisher_obj = models.Publisher.objects.get(id=7)
                        publisher_obj.name = "新的出版社名字"
                        publisher_obj.save()  --> 把修改提交到数据库
                        
        2. GET和POST
            1. GET请求:
                1. GET请求携带的数据都拼在了URL上
                2. GET请求携带的数据有长度限制 40k
            2. POST请求
                1. form表单提交数据
                2. 上传文件
                
            3. 几个GET请求具体的应用场景:
                1. 浏览器地址栏直接输入URL
                2. 点击a标签
                3. 搜索引擎检索

        3. request相关的知识点
            1. request.method
                1. GET
                2. POST
            2. request.POST   --> 所有和post请求相关的数据
            3. request.GET    --> 所有和GET请求相关的数据

对出版社的增删查改操作:

# 展示出版社列表
def publisher_list(request):
    # 去数据库查出所有的数据,填充到HTML中,给用户返回
    ret = models.Publisher.objects.all().order_by("id")
    return render(request, "publisher_list.html", {"publisher_list": ret})


# 添加新出版社列表,这是对表单数据操作,所以是POST请求
def add_publisher(request):
    error_msg = ""
    # 如果是POST请求,我就取到用户填写的数据
    if request.method == "POST":
        new_name = request.POST.get("publisher_name", None)
        if new_name:
            # 通过ORM去数据库里新建一条记录
            models.Publisher.objects.create(name=new_name)
            # 引导用户访问出版社列表页,查看是否添加成功 -->跳转
            return redirect("/publisher_list/")
        else:
            error_msg = "出版社名字不能为空!"
    # 用户第一次来,我给他返回一个用来填写的HTML页面
    return render(request, "add_publisher.html", {"error": error_msg})


# 删除出版社的函数
def delete_publisher(request):
    print(request.GET)
    print("=" * 120)
    # 删除指定的数据,通过URL取到数据,所以为GET请求
    # 1.从GET请求的参数里面拿到将要删除的数据的ID值
    del_id = request.GET.get("id", None)
    if del_id:
        # 去数据库删除当前id值的数据
        # 根据id值查找到数据
        del_obj = models.Publisher.objects.get(id=del_id)
        # 删除
        del_obj.delete()
        # 返回删除后的页面,跳转到出版社的列表页面,查看是否删除成功 -->跳转
        return redirect("/publisher_list/")
    else:
        return HttpResponse("要删除的数据不存在!")


# 编辑出版社
def edit_publisher(request):
    #用户修改完出版社的名字,点击提交按钮,给我发来新的出版社名字
    if request.method == "POST":
        print(request.POST)
        #取新出版社名字
        edit_id = request.POST.get("id")
        new_name = request.POST.get("publisher_name",None)
        #更新出版社
        #根据id取到编辑的是哪个出版社
        edit_publisher = models.Publisher.objects.get(id=edit_id)
        edit_publisher.name = new_name
        edit_publisher.save()#把修改提交到数据库
        #跳转到出版社列表页,查看是否编辑成功
        return redirect("/publisher_list")

    # 从GET请求的url中取到id参数
    edit_id = request.GET.get("id")
    if edit_id:
        # 获取当前编辑的出版社
        publisher_obj = models.Publisher.objects.get(id=edit_id)
        return render(request, "edit_publisher.html", {"publisher": publisher_obj})
    else:
        return HttpResponse("编辑的出版社不存在!")

ORM操作

      1. ORM外键操作
             图书表和出版社表  多对一 的关

     # 出版社
     class Publisher(models.Model):
       id = models.AutoField(primary_key=True)  # 自增的ID主键
       # 创建一个varchar(64)的唯一的不为空的字段
       name = models.CharField(max_length=64, null=False, unique=True)
       addr = models.CharField(max_length=128)


            # 书
            class Book(models.Model):
             id = models.AutoField(primary_key=True)  # 自增的ID主键
            # 创建一个varchar(64)的唯一的不为空的字段
            title = models.CharField(max_length=64, null=False, unique=True)
           # 和出版社关联的外键字段
            publisher = models.ForeignKey(to="Publisher")
        
    2. 查\增\删\改操作
        1. 查
            book_list = models.Book.objects.all()  --> 书对象的列表
            
        2. 增
            new_book_obj = models.Book.objects.create(
                title="新书的名字",
                # publisher=publusher_obj,
                publisher_id=7
            )
        3. 删除
            models.Book.objects.get(id=10).delete()
            
        4. 修改
            book_obj = models.Book.objects.get(id=9)
            book_obj.title=request.POST.get("book_title")
            book_obj.publisher_id=9
            book_obj.save()

你可能感兴趣的:(Python学习篇)