Python Model.objects.get()起作用,但在使用ForeignKey属性时不起作用

Python Model.objects.get()起作用,但在使用ForeignKey属性时不起作用,python,django,django-models,django-views,Python,Django,Django Models,Django Views,我有一个外形模型,如下所示: class Profile(models.Model): username = models.ForeignKey(User, blank=True, null=True) age = models.IntegerField(default=0) points = models.IntegerField(default=100) def __str__(self): return str(self.username)

我有一个外形模型,如下所示:

class Profile(models.Model):
    username = models.ForeignKey(User, blank=True, null=True)
    age = models.IntegerField(default=0)
    points = models.IntegerField(default=100)

    def __str__(self):
        return str(self.username)
这是我的模板

<h3><a href="{% url 'profile' u=i.user %}" class='username_foreign'>{{ i.user }}</a></h3>
正如你在这里看到的,我通过了
u
,这是用户名。但是,当我试图通过传递的
username
获取
profile
时,会出现以下错误:

ValueError at /profile/zorgan/

invalid literal for int() with base 10: 'zorgan'
但是,当我在我的
配置文件
模型的任何其他属性上使用
get()
时,它工作正常。它甚至可以打印我的
用户名
。所以当我这样做的时候:

def profile(request, u):
    if request.method == 'GET':
        print(u) #prints username
        profile = Profile.objects.get(points=50)
        print(profile.username) #successfully prints username (same as 'u')

    return render(request, 'base.html', {})

如上所述,通过属性获取
概要文件
对象对
用户名
不起作用。问题与
u
无关,因为它也成功地打印了。你知道问题出在哪里吗?

你调用的
用户名
字段根本不是用户名。它是一个ForeignKey,它是指向另一个表中某一行的整数值。你应该这样称呼它:
user

要在用户表中查找实际用户名,需要使用双下划线语法。这将有助于:

profile = Profile.objects.get(username__username=u)
但正如我所说,您应该真正重命名
用户名
字段,在这种情况下,您将执行以下操作:

profile = Profile.objects.get(user__username=u)
另一种方法是直接查找用户,然后获取配置文件:

user = User.objects.get(username=u)
profile = user.profile

但是这需要两个单独的查询,而不是一个合并的查询。

您调用的
用户名字段根本不是用户名。它是一个ForeignKey,它是指向另一个表中某一行的整数值。你应该这样称呼它:
user

要在用户表中查找实际用户名,需要使用双下划线语法。这将有助于:

profile = Profile.objects.get(username__username=u)
但正如我所说,您应该真正重命名
用户名
字段,在这种情况下,您将执行以下操作:

profile = Profile.objects.get(user__username=u)
另一种方法是直接查找用户,然后获取配置文件:

user = User.objects.get(username=u)
profile = user.profile

但是这需要两个独立的查询,而不是一个合并的查询。

非常感谢您解决了这个问题。我不太熟悉double _;语法,所以你能给我一个简短的总结或者给我指个地方解释一下吗?为什么它用于ForeignKey字段而不用于其他字段?因为用户名值在另一个模型中,即User。非常感谢您解决了这个问题。我不太熟悉double _;语法,所以你能给我一个简短的总结或者给我指个地方解释一下吗?为什么它用于ForeignKey字段而不是其他字段?因为用户名值在另一个模型中,即User。