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

Django3.2开发待办APP报FieldError无法解析user字段如何解决

修复方案

报错原因

你遇到的FieldError报错核心有两个问题:

  1. 自定义模型和Django自带的auth.User用户模型重名,逻辑完全混乱,你写的用来存储待办事项的模型不该命名为User
  2. 待办模型里关联用户的外键字段命名为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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:06:04