Python ';QuerySet';对象没有属性';电子邮件';
我发现QuerySet对象没有属性“email”的错误。。4.我尽力想解决这个问题,但没能找到解决办法Python ';QuerySet';对象没有属性';电子邮件';,python,django,django-rest-framework,django-forms,Python,Django,Django Rest Framework,Django Forms,我发现QuerySet对象没有属性“email”的错误。。4.我尽力想解决这个问题,但没能找到解决办法 from django.http import HttpResponse from loginsystem.models import newUser from django.contrib import messages from django.core.exceptions import MultipleObjectsReturned def login(request): i
from django.http import HttpResponse
from loginsystem.models import newUser
from django.contrib import messages
from django.core.exceptions import MultipleObjectsReturned
def login(request):
if request.method=='POST':
try:
userdetails=newUser.objects.filter(email=request.POST['email'] , password=request.POST['password'])
print("username=", userdetails)
request.session['email']=userdetails.email
return render(request, 'home.html')
谢谢在您的用户详细信息中添加.first()
:
userdetails=newUser.objects.filter(email=request.POST['email'] , password=request.POST['password']).first()
过滤器为returnQuerySet[]
。get\u object\u或_404
是返回实例,因此您必须使用.first()
在QuerySet[]
中获取用户,或者使用get\u object\u或_404使用“get”而不是“filter”。
过滤器:返回多个对象。
获取:返回单个对象。您正在使用userdetails.email访问电子邮件,因此,userdetails必须是单个对象
def login(request):
if request.method=='POST':
try:
userdetails=newUser.objects.get(email=request.POST['email'] , password=request.POST['password'])
print("username=", userdetails)
request.session['email']=userdetails.email
return render(request, 'home.html')
filter方法返回一个列表(即Queryset),而不是您想要的唯一值。您应该改用get方法
userdetails=newUser.objects.get(email=request.POST['email'] , password=request.POST['password'])
或
注意:获取非唯一查询,即多个对象将引发MultipleObjectsReturned
异常。确保获取索引对象。
如果不确定对象是否唯一,请执行以下操作:
userdetails=newUser.objects.filter(email=request.POST['email'] , password=request.POST['password'])
if userdetails.exists():
userdetails = userdetails[0]
请解释原因@明。。。谢谢,先生,它起作用了……请解释原因!过滤器:返回多个对象。get:返回单个对象。您正在使用userdetails.email访问电子邮件,因此,userdetails必须是单个对象。谢谢。你能把这个加在你的答案上吗。如果你这样做,我将投票表决:-)编辑Explanation@ShaidHasanShawon先生,我使用.get
而不是.filter
,但是它显示了在/login处返回的多个对象。请添加一些关于使用get的多个对象的情况!谢谢,先生。。。。。
userdetails=newUser.objects.filter(email=request.POST['email'] , password=request.POST['password'])
if userdetails.exists():
userdetails = userdetails[0]