2016-03-30 10 views
2

私はウェブ開発で新しく、実際にはどのように質問するのか分かりませんが、私のメイン/ models.pyにあります。foreignKeyを呼び出すときに他のフィールドを追加する

class First(models.Model): 
    two = models.ForeignKey(Two) 
    name = models.CharField(max_length=250) 

と私のサブ/ models.pyにあります。

class Two(models.Model): 
    name = models.CharField(max_length=250) 
    description = models.CharField(max_length=2000) 

私は、データベースにMySQLを使用していますし、私はselect * from firstTable;で私のデータベースやショーのテーブルをログインしたとき、私はそれを参照してください。

| two_id |name| 
| 1 | David |  

ForeignKey(another_model)を呼び出すと、そのIDが自動的に表示されます。 two_idの代わりにtwo_nameを表示することは可能ですか?

ところで、私は何をしたいのか説明したいと思います。私は本当に私が一文として説明することができませんでした。タイトルの説明が分かれば、私の質問を編集してください。

ありがとうございます。

+0

はそれを呼び出しますか?それをどこに示しますか? –

+0

申し訳ありませんが、私はそれを非常にうまく説明できないことを知っています。 "Select * from firstTable"と書くと、two_idを見たくないです。代わりに私はtwo_nameを見たいと思う。 @DanielRoseman – waterkinq

+0

Djangoを使用している場合、なぜselect文を書くのですか? –

答えて

3

データベースはこのように大丈夫です。結合ステートメントの出力にidの代わりにnameを表示するには、結合を使用できます。これはDjangoがあなたのためにやることです(これがDjangoを使いたい理由です)。ジャンゴで

、これはあなたのTwoモデルのインスタンスを返します。

first.two 

とこの方法、あなたはTwoインスタンスのnameにアクセスできます。

first.two.name 

いくつかのリストでFirstインスタンスの場合は、次のようにの名前をすべて出力できます。

First.objects.values('two__name') 

本当にこの書き込みをSQLでそれを見てみたい場合:

SELECT f.name, t.name FROM firstTable f, twoTable t WHERE f.two_id=t.id; 
+0

あなたの答えをありがとう、私はそれが動作することを知っている。しかし、私はfirstTableのビューを共有し、firstTableのビューのみを共有すると、彼はまだこれを見ることができますか?だから私はtwo_nameを示す新しい列を追加したいのです。 @Risadinha – waterkinq

+0

はい、ビューはそれらをうまく使用できます。 Djangoはあなたのための結合を行い、値を取得します。そのためにDBを正規化する必要はありません。これがリレーショナルDBの全体のポイントです。そうでなければ、その目的を揺さぶっています。 – Risadinha

関連する問題