解决django的upload更新图片问题,django的upload并不走逻辑层(因此选择完更新的图片后,数据库的图片路径并不会存入逻辑层配置的静态路径,造成去图片时候404报错找不到),是直接操作数据库的,所以不能用它更新图片,解决办法就是通过save()方法对图片单独更新操作
-
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()
-
views层先用update更新非图片的数据库信息:
#根据返回的id更新除图片外的字段,其中\"party_id\"表示的数据库存入的id字段,\"id\"页面返回的idmodels.send.objects.all().filter(party_id=id).update(# 通过下面的方法拿到值,括号内部是form表单内每一个字段的nameparty_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\'),)
-
views层接着通过save()更新图片——save会走内部逻辑,而不是直接操作数据库,这样默认路径就有了
#\"party_pic\"随便命名即可,他的作用是接收一下需要更新的字段信息#通过\"models.send.objects.get\"拿到models层的send函数,给定一个限制, 即\"party_id=id\",目的是更改这个条件下的这一行内部的party_imgparty_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()
-
最后一步就是将更新后的值渲染到界面取值了,这里不再详细描叙,效果截图如下:
如果对您有帮助,赏口饭吃❤谢谢老板❤