首页 > 解决方案 > 字段 '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 的工作原理

标签: pythondjangodjango-modelsdjango-viewsdjango-templates

解决方案


当您使用:

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)

推荐阅读