商品的增删改查
一、增加操作
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), # 修改商品