如何解决字段“ id”应为数字,但得到“ abdullah123”
我正在尝试通过用户名从UserBalance表过滤器中获取余额。
我尝试在实际上遇到错误的地方使用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的工作原理
解决方法
使用时:
.profile
username=models.ForeignKey(User,on_delete=models.CASCADE)
实际上不是用户名;它是username
。因此,您必须查询给定User
的用户,例如:
user
(当然,您应该将模型中的user_balance=UserBalance.objects.filter(username=user)
字段更改为username
,但这可以回答问题)。
以下是更好的代码:
user
,
username
模型的UserBalance
字段是ForeignKey
至User
。因此,当您在此字段上执行filter
或get
时,将无法使用字符串用户名来执行此操作。您要么必须传递整个User
实例,要么要传递此类实例的(整数)ID。
要获取具有特定用户名的UserBalance
个用户,因此,您首先需要查找具有该用户名的所有User
个实例,然后查找具有{{1 }}字段之一。您可以使用两个单独的查询来执行此操作-但在一个查询中这样做显然更有效,Django通过其直观的query API允许:
UserBalance
如果这看起来令人困惑(确实如此!),那是因为当您的username
字段应该仅仅是user_balance=UserBalance.objects.filter(username__username=username)
之类的时候,却被误命名为ForeignKey
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。