Django 1.9关联User模型到自定义模型出现NameError问题求助
解决Django 1.9中自定义模型关联内置User模型的NameError问题
嘿,你猜得没错!这个NameError完全是因为你没有在models.py里导入Django自带的User模型导致的。Django的内置User模型并不在你自己的models.py里,而是存放在django.contrib.auth.models模块中,直接引用User当然会找不到啦~
下面给你两种靠谱的解决方案,适配Django 1.9的版本:
方案1:直接导入内置User模型
这是最直接的方式,适合你当前没有自定义用户模型的场景:
- 在你的
models.py顶部添加导入语句:
from django.db import models from django.contrib.auth.models import User # 加上这行! from django.core.validators import validate_file_extension # 确保你也导入了文件验证器
- 然后修改
Clean模型的user字段定义:
class Clean(models.Model): name = models.CharField(max_length=100, blank=False) cv = models.TextField(max_length=10000, blank=True, null=True) cvfile = models.FileField(validators=[validate_file_extension]) cvscore = models.IntegerField() spellerrors = models.CharField(max_length=100, blank=False) user = models.ForeignKey(User, on_delete=models.CASCADE) # 现在就能正常识别User了
注意:Django 1.9开始
on_delete参数是必填项,一定要加上on_delete=models.CASCADE(表示当关联的用户被删除时,对应的Clean实例也会被删除),否则会触发报错。
方案2:使用settings.AUTH_USER_MODEL(推荐更灵活的方式)
如果你以后可能会自定义用户模型,或者想遵循Django的最佳实践,建议用这种方式——它会自动指向你项目中配置的用户模型,兼容性更强:
- 在
models.py顶部导入settings:
from django.db import models from django.conf import settings # 导入项目配置 from django.core.validators import validate_file_extension
- 修改
user字段:
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
后续步骤:关联用户与Clean实例
模型关联好之后,你需要确保用户在上传模型时,自动把当前登录用户和Clean实例绑定起来。比如在处理上传的视图中(要先确保用户已登录):
from django.contrib.auth.decorators import login_required from .models import Clean from .forms import CleanForm # 假设你有对应的上传表单 @login_required def create_clean(request): if request.method == 'POST': form = CleanForm(request.POST, request.FILES) if form.is_valid(): clean_instance = form.save(commit=False) clean_instance.user = request.user # 绑定当前登录的用户 clean_instance.save() # 这里可以添加跳转或成功提示逻辑 # GET请求的页面渲染逻辑...
最后别忘了数据库迁移
修改模型字段后,必须更新数据库结构:
python manage.py makemigrations python manage.py migrate
这样一来,每个Clean实例都会和创建它的用户关联,之后你就可以通过request.user.clean_set.all()来获取当前用户上传的所有模型啦~
内容的提问来源于stack exchange,提问作者Yunter
相关产品推荐
相关产品推荐

