You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中models.py的upload_to函数如何获取关联用户的username?

问题原因

  • 你的UserVerifyImg模型中关联User表的外键字段命名为user_idx,不是通用示例里的user,所以不能通过instance.user访问关联用户,要匹配你自己定义的字段名。
  • 原upload_to函数中直接写UserVerifyImg.user_idx.username是访问模型类的字段属性,不是当前正在保存的实例对应的用户数据,无法正确拿到值。

修复后的代码

from django.utils import timezone # 推荐用Django自带时间工具,适配项目时区配置
def upload_to(instance, filename):
    now_date = timezone.now().strftime("%Y/%m/%d")
    # 从当前实例的user_idx字段取关联的User对象,获取username
    return '/'.join(['verify', instance.user_idx.username, now_date, filename])

class UserVerifyImg(models.Model):
    user_idx = models.ForeignKey(
        User,
        db_column='user_idx',
        on_delete=models.CASCADE
    )
    business_type = models.CharField(max_length=255)
    image = models.ImageField(upload_to=upload_to)
    upload_date = models.DateTimeField(auto_now=True)

    class Meta:
        managed = False
        db_table = 'account_user_verify'

注意事项

  • 保存UserVerifyImg实例时,必须先给user_idx字段完成赋值,再执行save()操作,否则upload_to执行时仍然会取不到关联用户的username值。
  • 替换datetime.now()为Django自带的timezone.now(),可以适配项目的时区设置,避免生成的路径日期和实际时区不符。

内容的提问来源于stack exchange,提问作者basskiller

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 12:15:02