Django3.2开发待办APP报FieldError无法解析user字段如何解决
修复方案
报错原因
你遇到的FieldError报错核心有两个问题:
- 自定义模型和Django自带的
auth.User用户模型重名,逻辑完全混乱,你写的用来存储待办事项的模型不该命名为User - 待办模型里关联用户的外键字段命名为
user1,查询时用user作为筛选字段自然找不到对应的字段
同时你新增待办时没有绑定当前登录用户,所以所有用户都能看到全部待办数据。
第一步:修正models.py
将存储待办的模型改名,调整外键字段名,删掉冗余字段:
from django.db import models from django.db.models.deletion import CASCADE from django.contrib.auth.models import User class TodoItem(models.Model): content = models.CharField(max_length=200, null=True) created = models.DateTimeField(auto_now_add=True) # 关联Django自带用户模型,字段名改为user user = models.ForeignKey(User, on_delete=CASCADE) def __str__(self): return self.content
第二步:修正views.py逻辑
调整home视图的查询逻辑,仅拉取当前用户的待办
@login_required(login_url='/login') def home(request): all_items = TodoItem.objects.filter(user=request.user).order_by("created") context = {'all_items': all_items} return render(request, 'html/home.html', context)
调整add_content视图,新增待办时绑定当前登录用户
@login_required(login_url='/login') def add_content(request): if request.method == "POST": newItem = TodoItem( content=request.POST.get('content'), user=request.user ) newItem.save() return redirect('/')
修复其他逻辑错误
- 删除
login_user视图上的@login_required装饰器,否则未登录用户访问登录页会进入重定向死循环 - 将
logoutUser视图的跳转路径改为redirect('/login'),避免相对路径出错
第三步:执行数据迁移
修改完成后在项目根目录执行以下命令同步数据库结构:
python manage.py makemigrations python manage.py migrate
修复后即可实现每个用户仅能查看、管理自己的待办数据。
内容的提问来源于stack exchange,提问作者Zani123
相关产品推荐
相关产品推荐

