Django orm数据库数据的增删改查

本文详细介绍了使用Django ORM进行商品数据的增删改查操作。在增加操作中,强调了关联属性处理和上传图片的方法;查找操作展示了如何显示所有商品,特别是针对不同登录用户的查询;删除操作提到了先删除图片文件,再进行数据库记录的删除;最后,修改操作涉及页面、视图和路由的设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

商品的增删改查
一、增加操作
1.页面
在这里插入图片描述
在这里插入图片描述
2.视图

def goods_add(request):
    if request.method == 'POST':
        # 1.获取表单提交过来的内容
        goods_num = request.POST.get('goods_num')  # 商品编号
        goods_name = request.POST.get('goods_name')  # 商品名称
        goods_oprice = request.POST.get('goods_oprice')  # 商品原价
        goods_xprice = request.POST.get('goods_xprice')  # 商品现价
        goods_count = request.POST.get('goods_count')  # 商品库存
        goods_description = request.POST.get('goods_description')  # 商品描述
        goods_type_id = request.POST.get('goods_type')  # 商品类型的id
        goods_content = request.POST.get('goods_content')  # 商品详情
        # 注意上传字段使用 FILES.getlist() 来获取 多张图片
        userfiles = request.FILES.getlist('userfiles')  # 商品缩略图
        # 2.保存到数据库
        goods_obj = models.Goods.objects.create(
            goods_num=goods_num,
            goods_name=goods_name,
            goods_oprice=goods_oprice,
            goods_cprice=goods_xprice,
            goods_kucun=goods_count,
            goods_description=goods_description,
            goods_details=goods_content,
            types=models.Type.objects.get(id=goods_type_id),  # 注意types是对象
            # types_id=goods_type_id 使用数据库中的字段 进行赋值
            seller_id=request.session.get('id')
        )
        # 3.保存图片到项目
        # print(userfiles)
        # [<InMemoryUploadedFile: 1.jpg (image/jpeg)>,
        # <InMemoryUploadedFile: 2.jpg (image/jpeg)>,
        # <InMemoryUploadedFile: 3.jpg (image/jpeg)>]
        print(type(userfiles[0]))
        # <class 'django.core.files.uploadedfile.InMemoryUploadedFile'>
        # print(userfiles[0])  # 1.jpg(假象不是字符串) -->对象
        # print(userfiles[0].name)
        # print(type(userfiles[0].name))  # <class 'str'># 图片的名称
        # 循环遍历读取每一张图片保存到images下  -->>枚举 (0,'<InMemoryUploadedFile: 3.jpg (image/jpeg)>')
        for index, image_obj in enumerate(userfiles):
            # 1.保存图片
            # 苹果_0.jpg 苹果_1.jpg 苹果_2.png
            # 1.jpg  -->> 1.2.3.4.jpg
            name = image_obj.name.rsplit('.', 1)[1]
            path = 'static/seller/images/{}_{}.{}'.format(goods_name, index, name)
            with open(path, mode='wb') as f:
                for content in image_obj.chunks():
                    f.write(content)

            # 2.保存图片路径到数据库
            obj_image = models.Image()
            path1 = 'seller/images/{}_{}.{}'.format(goods_name, index, name)
            obj_image.img_address = path1
            obj_image.img_label = image_obj.name  # 图片原名称
            # {%static xxx%} /static/seller/images/苹果_0.jpg
            obj_image.goods = goods_obj  # 设置图片和商品的关系
            obj_image.save()
            # 4.重定向到商品列表
        return redirect('/seller/goods_list/')
    else:
        # 1.查询所有的商品类型数据
        type_obj_list = models.Type.objects.all()
        return render(request, 'seller/goods_add.html', {'type_obj_list': type_obj_list})

需要注意事项:
1.对象的属性如果是一个关联属性,例如types,需要对应一个对象。如果使用的是数据库表格中字段(types_id) 需要对应一个值。
在这里插入图片描述
2.获取上传的多张图片
(1)使用的模型类中的字段 ImageFeild(),这个字段需要和Pillow模块配合使用。Python3.6后 使用PIL。
(2)获取上传的多张图片的方法: request.FILES.getlist(‘xxx’)
(3)获取图片名称: image_obj.img_address.name。Python会将img_address 属性封装成一个对象。隐藏使用 属性.name 来获取图片名称。
3.路由

path(‘goods_add/’, views.goods_add), # 商品添加

二、查找操作(显示所有的商品)
1.页面
在这里插入图片描述
在这里插入图片描述
2.视图

def goods_list(request):
    # 1.查询出所有的商品
    # 获取用户的id
    seller_id = request.session.get('id')
    # select * from Seller_goods where seller_id= seller_id
    goods_obj_list = models.Goods.objects.filter(seller_id=seller_id)
    return render(request, 'seller/goods_list.html',
                  {'goods_obj_list': goods_obj_list})

注意:
查询出不同登录用户的所有商品

3.路由

path('goods_list/', views.goods_list),  # 商品列表

三、删除操作
1.页面
在这里插入图片描述

2.视图

def goods_delete(request):
    # 1. 获取提交过来的id
    id = request.GET.get('id')
    # 2.查询数据库
    # 获取商品对象
    goods_obj = models.Goods.objects.get(id=id)
    # 获取图片对象 根据商品查找图片-->> 反向查询
    image_obj_list = goods_obj.image_set.all()  # 获取商品对应的所有图片对象
    # print(image_obj_list[0].img_address)
    # print(type(image_obj_list[0].img_address))
    # print(image_obj_list[0].img_address.name)
    # print(type(image_obj_list[0].img_address.name))
    # (1).删除图片
    # (a) 先删除保存的图片
    for image_obj in image_obj_list:
        path = 'static/' + image_obj.img_address.name  # 获取路径
        # seller/images/苹果_0.jpg
        os.remove(path)
    # (b).删除数据库保存的图片路径
    image_obj_list.delete()
    # (2).删除商品
    goods_obj.delete()
    # 3.重定向到商品列表
    return redirect('/seller/goods_list/')

注意事项:
(1). 先根据路径删除保存的图片
(2).然后删除路径
(3).删除商品
3.路由

path('goods_delete/', views.goods_delete),  # 删除商品

四、修改操作
1.页面
在这里插入图片描述

2.视图
在这里插入图片描述

3.路由

path('goods_change/', views.goods_change),  # 修改商品

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值