Django更新头像时,数据库只保存了文件名

探讨Django中更新用户头像时,路径记录不一致的问题。在model中使用ImageField,upload_to参数在create时生效,但在update时失效,导致数据库记录路径错误。通过调整upload_to参数和自定义media路径解决。
摘要由CSDN通过智能技术生成

如题:在做更新头像功能的时候,我遇到了一个问题,就是在model里面

logo = models.ImageField(upload_to='logo')

定义了在media路径下,新建一个logo文件夹,上传的文件都存放在logo下面,数据库记录logo/img.jpg

但是在更新头像的时候发现,更换的头像不再以“logo/XXX.jpg”形式记录,而是以“XXX.jpg”方式记录,导致前端路径错误无法显示头像。

--------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------------

也就是说,图片在上传操作过程(create)中,会触发ImageField的upload_to='logo',并记录相应的路径,但是在更换操作(update)中,并不触发,导致数据库只存了图片的文件名。

查阅了大量的文章都没有找到原因。。。(话说Django的资料比起spring真是少的可怜-_-||)

但是条条大路通罗马,既然更新的操作导致数据库只记录图片文件名,这一步骤无法改变,那我在一开始上传图片的步骤就只记录文件名,create和update统一,使得前端路径是一致的就OK了。

------------------------------------------------------------------------------------------------------------------------------

APP中的models.py

from django.db import models


class User(models.Model):
    # 用户表实例
    id = models.AutoField(verbose_name='id',primary_key=True)
    userCode = models.CharField(max_length=30,verbose_name='用户账号')
    userPassword = models.CharField(max_length=30,verbose_name='用户密码')

    logo = models.ImageField(upload_to='') # 设置upload_to为空,数据库的图片路径以“XXX.jpg”形式记录

    userName = models.CharField(max_length=30,verbose_name='用户名称')
    role = models.CharField(max_length=10,verbose_name='用户角色')
    createTime = models.CharField(max_length=30,verbose_name='创建时间')
    def __unicode__(self):
        return u'User:%s'%self.id

    class Meta():
        # 实体连接user表
        db_table = 'user'

在文件中修改logo = models.ImageField(upload_to=''),使得上传图片的时候upload_to='',这样的话,数据库记录的图片路径以“XXX.jpg”形式记录,后面更新图片的时候也是如此,显示就没问题了。

但是这样有一个问题:如果我就是想存在logo文件下面怎么办?我目前想到的办法是在settings.py设置media路径后面加,例如:

MEDIA_ROOT=os.path.join(BASE_DIR,'media/logo/').replace("\\", "/") # 指定上传文件目录
MEDIA_URL = 'media/logo/' # 读取上传文件目录

# 这里好像不能是 MEDIA_URL = '/media/logo/' ,会报错,原因未知。

即使最终能实现我的需求,但是还有一种情况:动态地创建存放图片存放的文件夹,例如用户的头像要存放在自己的文件夹下,而不是统一个文件夹,就需要在创建的时候动态获取用户名并创建存放的路径。“用户1/用户1.jpg”,“用户2/用户2.jpg”。

目前还是小白一个,如有建议请在评论区多多指教。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值