当前位置 博文首页 > zy010101博客:Django——图书管理系统(七)

    zy010101博客:Django——图书管理系统(七)

    作者:[db:作者] 时间:2021-06-12 09:34

    前文,我已经介绍过了外键。本文将介绍,在带有外键的情形下,如何实现增删改查的。图书管理系统现在已经可以管理出版社了,这一步就是管理书籍。鉴于前面的一系列文章已经介绍过了出版社是如何增删改查的,本次就直接上代码,展示效果。

    views.py文件代码如下:

    from django.shortcuts import render, redirect, HttpResponse
    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":  # 如果是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')  # 获取URL中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')  # 重定向到list页面
    
    
    def book_list(request):
        objs = models.Book.objects.all()
    
        # for obj in objs:
        #     print(obj.name)
        #     print(obj.publisher.name)       # 关联出版社的名字
        #     print(obj.publisher)            # 书籍所关联的出版社对象
        #     print(obj.publisher_id)         # 通过_id可以直接拿到关联的出版社的id
        #     print("\n")
    
        return render(request, 'book_list.html', {'objs': objs})
    
    
    def book_add(request):
        if request.method == "GET":
            pub_obj = models.Publisher.objects.all()
            return render(request, 'book_add.html', {'pub_obj': pub_obj})
        elif request.method == "POST":
            book_name = request.POST.get('book_name')
            pub_id = request.POST.get('pub_id')
            if not book_name:  # 书名为空
                pub_obj = models.Publisher.objects.all()
                return render(request, 'book_add.html', {'pub_obj': pub_obj, 'err_msg': '书名不能为空'})
            if models.Book.objects.filter(name=book_name):  # 书籍已存在
                pub_obj = models.Publisher.objects.all()
                return render(request, 'book_add.html', {'pub_obj': pub_obj, 'err_msg': '书籍已存在'})
            # models.Book.objects.create(name=book_name, publisher=models.Publisher.objects.get(id=pub_id))         #两种方式
    
            models.Book.objects.create(name=book_name, publisher_id=pub_id)
            return redirect('/book_list/')
        else:
            return HttpResponse("请求方式错误")
    
    
    def book_del(request):
        if request.method == "GET":
            book_id = request.GET.get('id')
            obj = models.Book.objects.filter(id=book_id).delete()
            return redirect('/book_list/')
        else:
            return HttpResponse("请求方式错误")
    
    
    def book_edit(request):
        book_id = request.GET.get('id')
        obj = models.Book.objects.get(id=book_id)
        pub_obj = models.Publisher.objects.all()
        if request.method == "GET":
            return render(request, 'book_edit.html', {'obj': obj, 'pub_obj': pub_obj})
        elif request.method == "POST":
            book_name = request.POST.get('book_name')
            pub_id = request.POST.get('pub_id')
    
            # 方式一
            # obj.name = book_name
            # obj.publisher_id = pub_id
            # obj.save()  # 保存到数据库中
    
            # 方式二
            models.Book.objects.filter(id=book_id).update(name=book_name,
                                                          publisher_id=pub_id)  # 实际上filter返回的是一个列表,理论上是此时的update是一个批量操作。
            # 这个update是
            return redirect('/book_list/')
        else:
            return HttpResponse("请求方式错误")
    

    ?

    这张图片是删除python入门到放弃以后