を使用したとき、私はこのようになりますプロファイルモデルを持っている:Model.objects.get()は動作しますが、ないForeignKeyの属性
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>
ですURL:
url(r'^profile/(?P<u>\w+)/', profile, name='profile')
、ここで私のビュー機能があります:
def profile(request, u):
if request.method == 'GET':
profile = Profile.objects.get(username=u)
return render(request, 'base.html', {})
ここからわかるように、私はユーザ名であるu
を渡します。私が通過しusername
経由get()
profile
しようとする。しかし、私はこのエラーを取得する:私は私のProfile
モデルの他の属性にget()
を使用する場合
ValueError at /profile/zorgan/
invalid literal for int() with base 10: 'zorgan'
はしかし、それが正常に動作します。そしてそれは私のusername
を印刷します。だから私が行うときに、この:
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', {})
あなたがusername
のために動作しません。その属性を経由してProfile
オブジェクトを取得し、上記の見ることができるように。問題はu
とは関係なく、正常に印刷されます。何が問題なのか?
問題を解決してくれてありがとうございました。私はあまりにもダブル__構文に精通していないので、あなたは簡単な要約を与えるか、それを説明するどこかで私を指摘することができますか?なぜForeignKeyフィールドに使用され、他のフィールドには使用されないのですか? – Zorgan
ユーザ名の値が別のモデル*、つまりUserであるため*です。 –