Django报错:BaseManager.all()收到意外关键字参数'Login'求助
问题修正方案
错误翻译
错误信息:BaseManager.all() 收到意外的关键字参数 'Login'
错误原因
all()方法仅用于获取模型的全部数据,不接受任何查询条件参数。你想根据关联的User对象筛选Users数据,不能直接给all()传参,得用专门的过滤方法。
修正方法
方法1:使用filter()或get()筛选
- 若不确定是否存在对应记录,用
filter()返回查询集(可能为空):
def Account(request): user = Users.objects.filter(Login=request.user) context = { 'title': 'title', 'user': user, } return render(request=request, template_name='site/account.html', context=context)
- 若确定当前登录用户一定有对应的
Users记录,用get()直接获取单个对象:
def Account(request): user = Users.objects.get(Login=request.user) context = { 'title': 'title', 'user': user, } return render(request=request, template_name='site/account.html', context=context)
方法2:利用一对一关系的反向关联
因为Login是一对一字段,Django会自动给User模型添加反向关联属性(默认是模型名小写users),可直接通过当前用户对象获取对应数据:
def Account(request): # 需确保用户已登录且存在对应Users记录,否则会抛出异常 user = request.user.users context = { 'title': 'title', 'user': user, } return render(request=request, template_name='site/account.html', context=context)
方法3:结合get_object_or_404处理不存在的情况
若想在没有对应记录时返回404页面,可使用get_object_or_404:
from django.shortcuts import get_object_or_404 def Account(request): user = get_object_or_404(Users, Login=request.user) context = { 'title': 'title', 'user': user, } return render(request=request, template_name='site/account.html', context=context)
内容的提问来源于stack exchange,提问作者TASK
相关产品推荐
相关产品推荐

