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。