基于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
相关产品推荐
相关产品推荐

