python - 字段 '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 的工作原理
解决方案
当您使用:
username=models.ForeignKey(User, on_delete=models.CASCADE)
username
不是真正的用户名;它是一个User
. 因此,您必须查询给定的用户user
,例如:
user_balance=UserBalance.objects.filter(username=user)
(当然,您应该将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)
推荐阅读
- javascript - 如何在AngularJS中单击按钮时动态更改弹出标题范围变量
- reactjs - 如何在 React 中捕获 youtube iframe api 事件
- c - 如果换行符出现在空格之后,我在使用 scanf() 获取换行符时遇到问题
- reactjs - 添加到 react-native 视图的样式不能正常工作?
- c# - .net core 3 依赖注入服务作为“配置”的参数
- azure - 对象检测模型 - tensorflow 服务 - k8s 部署:需要很长时间 3-4 秒
- c - 多次输入变量 answer 会退出整个程序
- cassandra - TWCS 没有根据 window_size 和 window_unit 生成 SStables
- mysql - 如何将我的电子商务网站的流量部分转移到不同的 Google VPC?
- python - 程序在终端中加载时的三点动画