2012-02-24 8 views
5

は、私は通常、Djangoは、私は3が必要な場合、私は単にDjangoは:複数の外部キーを持つことがどのように

from django.db import models 

class Order(models.Model): 
    user = models.ForeignKey(User) 
    comments = models.CharField(max_length=400) 
    date_created = models.DateTimeField('created date') 

class User(models.Model): 
    name = models.CharField(max_length=200) 
    age = models.IntegerField() 

のようなものが、何をすればuser_idと呼ばれる外部キーを作成することを知っている一つのテーブルで同じテーブルを参照します別の外来キーOrderにはすべてがUserを指していますか? 3つの外部キーはuser_created,user_modifieduser_statusとなります。

+0

[同じモデルに2つの外部キーをDjangoで登録するにはどうすればいいですか?](https://stackoverflow.com/questions/543377/how-can-i-have-two-foreign-keys-to -the-same-model-in-django) –

答えて

13

解決策は簡単です実際:

class Order(models.Model): 
    user_status = models.ForeignKey(User, related_name = 'orders_status') 
    user_created = models.ForeignKey(User, related_name = 'orders_created') 
    user_modified = models.ForeignKey(User, related_name = 'orders_modified') 

あなただけのユーザーオブジェクトから順にアクセスする際にあいまいさを避けるために、別々のrelated_name Sを定義する必要があります。

+0

この場合の 'user'は' user_status'でしょうか?最初に 'related_name'を使わない理由はありますか? – hobbes3

+0

最初のものはデフォルトの関連する名前をとり、 'user.order_set'でアクセスされます - もちろん、ここでもカスタム関連の名前を割り当てることができます。 – alex

+0

...はい、最初のものはuser_statusです - 私はあなたの投稿でそれを見落とし、私の答えを更新しました – alex

関連する問題