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

基于Django的jQuery-File-Upload如何为模型添加User_id?

给Django Files模型添加用户关联的正确做法

你不需要修改前端传递的JSON数据,因为用户ID应该从后端的request.user获取(这样更安全,避免前端篡改用户信息)。正确的步骤是先修改模型添加用户关联字段,再在视图中处理关联逻辑,具体如下:

1. 更新Files模型

首先给Files模型添加一个与User的外键关联字段(不要直接用user_id,Django ORM会自动处理底层的ID字段):

from django.contrib.auth.models import User

class Files(models.Model):
    file = models.FileField(upload_to="uploads/%Y/%m/%d/")
    created = models.DateTimeField(auto_now_add=True)
    # 添加用户关联,on_delete可根据需求调整,比如CASCADE表示用户删除时关联文件也删除
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='uploaded_files')

2. 执行数据库迁移

修改模型后,需要生成并应用迁移来更新数据库表结构:

python manage.py makemigrations
python manage.py migrate

3. 修改视图中的保存逻辑

你已经在视图里拿到了当前用户的信息,现在需要在保存文件时把用户关联到文件对象上,修改post方法:

def post(self, request):
    form = UploadForm(self.request.POST, self.request.FILES)
    if form.is_valid():
        # 使用commit=False先不保存到数据库,方便添加额外字段
        file = form.save(commit=False)
        # 关联当前登录用户
        file.user = request.user
        # 现在将关联好用户的文件保存到数据库
        file.save()
        data = {'is_valid': True, 'name': file.file.name, 'url': file.file.url}
    else:
        data = {'is_valid': False}
    return JsonResponse(data)

这里完全不需要修改前端的JSON,因为前端只负责上传文件,用户身份由后端的登录状态保证,这种方式比前端传用户ID更安全可靠。

4. 表单无需修改

你的UploadForm可以保持原样,因为user字段是后端自动填充的,不需要前端提交这个字段,所以fields = ['file']完全满足需求。

这样处理后,每个上传的文件都会关联到当前登录的用户,后续你也可以通过request.user.uploaded_files快速获取该用户上传的所有文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 00:08:11