解决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"页面返回的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'), )
-
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()
-
最后一步就是将更新后的值渲染到界面取值了,这里不再详细描叙,效果截图如下:
猜你喜欢:https://blog.csdn.net/Q893448322/article/details/107642349?spm=1001.2014.3001.5501
如果对您有帮助,赏口饭吃❤谢谢老板❤