2017-08-30 8 views
0

Userクラスのインスタンスを格納する外部キーを持つテーブル 'Friend'を作成する必要があります。そのうちの2つは、友人用とユーザー属性の2つです。 (テーブル関係の)クラス内に2つの外部キーを設定するにはどうすればよいですか? DJANGO ORM

これを行う方法? OnetoOneFieldは動作しません。私は両方のキーを作るようにしようとすると、ターミナルでエラーが発生します。 これは、ユーザーからフレンドへの2つの多対多の関係です。

これが不可能な場合は、これを設定するより良い方法は何ですか? Userテーブルは、それ自身に対して1対多の関係を持つことができますか?

class Friend(models.Model): 
    id = models.IntegerField(primary_key=True) 
    friend_id= models.ForeignKey(User, null=False) 
    user_id = models.ForeignKey(User, null=False) 
+0

実際には多対多の照合は、2つの外部キーを持つ新しいマッピングテーブルをバックグラウンドで作成します。したがって、Userクラスを置き換えたくない場合は、見た目が良く見えます。 –

答えて

0

あなたは2人の関係、 ただ、一人のユーザーを必要としない、私はあなたの疑問を理解していれば見てみましょう、それから、あなたは関係のすべての属性にアクセスすることができます。 例:

appname.Friend.friend_id: (fields.E305) Reverse query name for 'Friend.friend_id' clashes with reverse query name for 'Friend.user_id'. 
     HINT: Add or change a related_name argument to the definition for 'Friend.friend_id' or 'Friend.user_id' 

それは明らかにあなたがrelated_name引数を追加する必要があることを、伝え:

ここ
class Friend(models.Model): 
    friend_id = models.ManyToManyField(settings.AUTH_USER_MODEL) 
    user_id = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='user_id') 

移行をしようとしながら、あなたはおそらく、このエラーを見てきました

Friend.user_id.firstname 
0

見込みのあるユーザーモデルのカスタマイズと拡張に関するベストプラクティスについては、Django docs pageです。

関連する問題