質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

10396閲覧

外部キーでデータを他のテーブルから引っ張ってきた場合、idではなく名称が表示されてしまう。

退会済みユーザー

退会済みユーザー

総合スコア0

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2015/08/04 13:27

python

1#models.py 2 3#工事名を登録するモデル 4class Site(models.Model): 5 id = models.IntegerField('工事番号', blank = True, primary_key = True, unique = True) 6 name = models.CharField(u'工事名称', blank = True, max_length = 100) 7 def __unicode__(self): 8 return self.name 9 10#支払いを登録するモデル 11class Payment(models.Model): 12 date = models.DateField(u'支払日') 13 payee = models.ForeignKey(Partner) 14 site_id = models.ForeignKey(Site) 15 contents = models.CharField(u'内容', max_length = 50) 16 ammount = models.IntegerField(u'金額')

上記のとおり、Paymentモデルは、site_idにおいて、Siteモデルを外部キーとして取り扱っています。

python

1#views.py 2def payment_detail(request,id): 3 paymentQuerySet = Payment.objects.filter(payee = id) 4 payment = [p for p in paymentQuerySet] 5 return render_to_response('cls/payment_detail.html', 6 {'payment' : payment}, 7 context_instance = RequestContext(request) 8 )

テンプレートは、下記のとおりです。

html

1#payment_detail.html 2{{payment.site_id}}

とすると、私としては、工事番号(Siteモデルのid)が表示されてほしいのですが、工事名(Siteモデルのname)が表示されています。

私の考えていたイメージでは、
paymentの属性の中に、siteモデルのidが含まれるので、idが表示されるべきかと思いきや、siteモデルの工事名が表示されたので、どうしたらよいかと考えています。
外部キーに関する理解が不足しているのだと思いますが、外部キーでデータを引っ張って来る時、どうしてidが表示されないのでしょうか?

分かりにくい質問で申し訳ありません。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

{{payment.site_id.id}}が期待されているものだと思います。
{{payment.site_id}}だと、Siteの____unicode____が返ってきます。

投稿2015/08/11 17:59

kokardy

総合スコア781

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/08/15 03:14

お礼が遅くなり申し訳ありません。 payment.site_id_id としたら、うまく行きました。 mysqlにアクセスしてカラム名を確認したら、なぜかそのような名前がつけられていました。 ありがとうございました。
guest

0

Python

1 site_id = models.ForeignKey(Site)

これでは、Siteモデルの何が表示用のフィールドなのかが判らないので、システムが表示名が入っていそうなnameフィールドを選んで、表示に使ったという事なのだと思います。

Python

1 site_id = models.ForeignKey(Site, verbose_name="id")

のように、表示用のフィールド(verbose_name)として、idを使うと指定すれば解決するのではないでしょうか。

投稿2015/08/05 01:44

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/08/09 10:38

ご回答ありがとうございます。 しかし、 models.pyにおいて、 site_id = models.ForeignKey(Site, verbose_name="id") としても、 html上の {{payment.site_id}}の箇所には、 相変わらず、工事番号(Siteモデルのid)ではなく、工事名(Siteモデルのname)が表示されてしまいます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問