Python 字段';id';应为一个数字,但得到';阿卜杜拉123';
我试图通过用户名从UserBalance表过滤器中获取余额 我尝试过使用Python 字段';id';应为一个数字,但得到';阿卜杜拉123';,python,django,django-models,django-views,django-templates,Python,Django,Django Models,Django Views,Django Templates,我试图通过用户名从UserBalance表过滤器中获取余额 我尝试过使用UserBalance.objects.filter(username=username)但实际遇到错误 #views.py def login_validation(request): if request.method=='POST': username=request.POST.get("username")
UserBalance.objects.filter(username=username)
但实际遇到错误
#views.py
def login_validation(request):
if request.method=='POST':
username=request.POST.get("username")
password=request.POST.get("password")
user=auth.authenticate(username=username, password=password)
if user is not None:
auth.login(request, user)
user_balance=UserBalance.objects.filter(username=username) #error_i_am_getting_here
return render(request, "homepage.html", {'name':username, 'balance':user_balance})
else:
return redirect("http://google.com/")
else:
return redirect("http://yahoo.com/")
#models.py
from django.db import models
from django.contrib.auth.models import User
class IncomeExpense(models.Model):
entry_type=models.CharField(max_length=100)
amount=models.IntegerField()
details=models.TextField()
capture_date=models.DateField()
username=models.ForeignKey(User, on_delete=models.CASCADE)
class UserBalance(models.Model):
balance=models.IntegerField()
username=models.ForeignKey(User, on_delete=models.CASCADE)
我已经粘贴了views.py和models.py代码。我尝试使用用户名过滤器,它给出了一个错误,我也尝试使用get方法…但再次得到相同的错误。另外,请向我解释使用以下工具时get和filter是如何工作的:
username=models.ForeignKey(User, on_delete=models.CASCADE)
用户名
不是真正的用户名;它是用户
。因此,您必须查询给定用户的用户,如:
user_balance=UserBalance.objects.filter(username=user)
(当然,您应该将模型中的用户名
字段更改为用户
,但这就回答了问题)
下面是更好的代码:
#views.py
def login_validation(request):
if request.method=='POST':
username=request.POST.get("username")
password=request.POST.get("password")
user=auth.authenticate(username=username, password=password)
if user is not None:
auth.login(request, user)
user_balance=UserBalance.objects.filter(user=user) #error_i_am_getting_here
return render(request, "homepage.html", {'name':user.username, 'balance':user_balance})
else:
return redirect("http://google.com/")
else:
return redirect("http://yahoo.com/")
#models.py
from django.db import models
from django.contrib.auth.models import User
class IncomeExpense(models.Model):
entry_type=models.CharField(max_length=100)
amount=models.IntegerField()
details=models.TextField()
capture_date=models.DateField()
user=models.ForeignKey(User, on_delete=models.CASCADE)
class UserBalance(models.Model):
balance=models.IntegerField()
user=models.ForeignKey(User, on_delete=models.CASCADE)
UserBalance
模型的username
字段是指向User
的外键。因此,当您在此字段上执行筛选
或获取
时,您不能使用字符串用户名。您必须传递整个用户
实例,或者传递此类实例的(整数)id
因此,要获取具有特定用户名的用户的UserBalance
s,您需要首先查找具有该用户名的所有User
实例,然后查找具有与其中一个匹配的username
字段的所有UserBalance
s。您可以通过两个单独的查询来实现这一点,但在一个查询中实现这一点显然更有效,Django通过其直观的:
user\u balance=UserBalance.objects.filter(username\u username=username)
如果这看起来令人困惑(确实如此!),这是因为您的ForeignKey
字段被错误地命名为username
,而它应该只是类似于user
显示您的UserBalance模型,我怀疑username是外键,对吗?谢谢您的回答…我得到的值如下…我尝试了-->user\u balance=UserBalance.objects.filter(username\uu username=username)。值列表('balance',flat=True)…但我将此作为输出,您的总余额是我通过执行UserBalance.objects.filter(username\uu username=username)。值列表('balance',flat=True)[0]谢谢你的时间…我的问题解决了。我把我的问题标记为已解决谢谢你的时间。我的问题解决了…我把这个问题标记为已解决