django的upload更新图片

解决django的upload更新图片问题,django的upload并不走逻辑层(因此选择完更新的图片后,数据库的图片路径并不会存入逻辑层配置的静态路径,造成去图片时候404报错找不到),是直接操作数据库的,所以不能用它更新图片,解决办法就是通过save()方法对图片单独更新操作

  1. models层

    class send(models.Model):
        party_id = models.AutoField(primary_key=True,verbose_name="活动名称")
        party_name = models.CharField(default="",max_length=20,verbose_name="活动名称")
        party_img = models.ImageField(upload_to="cources/%Y/%m")
        party_s_time = models.DateField()
        party_e_time = models.DateField()
        party_area1 = models.TextField()
        party_area2 = models.TextField()
        party_lx = models.TextField()
        party_ny = models.TextField()
    
  2. views层先用update更新非图片的数据库信息:

    #根据返回的id更新除图片外的字段,其中"party_id"表示的数据库存入的id字段,"id"页面返回的id
            models.send.objects.all().filter(party_id=id).update(
                # 通过下面的方法拿到值,括号内部是form表单内每一个字段的name
                party_name=request.POST.get("activity_name"),
                party_s_time=request.POST.get("activity_start_time"),
                party_e_time=request.POST.get("activity_end_time"),
                party_area1=request.POST.get("province"),
                party_area2=request.POST.get("city"),
                party_lx=request.POST.get('leixing'),
                party_ny=request.POST.get('neirong'),
    
            )
    
  3. views层接着通过save()更新图片——save会走内部逻辑,而不是直接操作数据库,这样默认路径就有了

    		#"party_pic"随便命名即可,他的作用是接收一下需要更新的字段信息
    		#通过"models.send.objects.get"拿到models层的send函数,给定一个限制,					即"party_id=id",目的是更改这个条件下的这一行内部的party_img
            party_pic = models.send.objects.get(party_id=id)
            #拿到限定条件"party_id=id"下的图片字段"party_img",替换为界面修改的图						片"request.FILES.get("party_img")"
            party_pic.party_img = request.FILES.get("party_img")
            # 最后保存一下即可
            party_pic.save()
    
  4. 最后一步就是将更新后的值渲染到界面取值了,这里不再详细描叙,效果截图如下:
    在这里插入图片描述猜你喜欢:https://blog.csdn.net/Q893448322/article/details/107642349?spm=1001.2014.3001.5501

如果对您有帮助,赏口饭吃❤谢谢老板❤

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值