2017-12-05 1 views
0

Profileモデルオブジェクトの2つをモデルオブジェクトの一部にするシステムを実装しようとしています。ここ'スルー'モデルと多対多の関係がマイグレーション時にエラーを返す

は、ペアモデル続いて、プロファイルである:

class Profile(models.Model): 
    user = models.OneToOneField(settings.AUTH_USER_MODEL, 
           on_delete=models.CASCADE, 
           null=True, blank=True) 
    pair = models.ManyToManyField('self', through='Pair', 
            symmetrical=False, 
            related_name='pair_to+') 

class Pair(models.Model): 
    requester = models.ForeignKey(Profile, related_name='pairing_requester') 
    accepter = models.ForeignKey(Profile, related_name='pairing_accepter') 
    requester_learns = models.CharField(max_length=60, null=True) 
    requester_teaches = models.CharField(max_length=60, null=True) 

プロファイルとの間の関係は対称でなければならない、(でprofile1、プロファイル2)が一意のオブジェクトであり、Iは、(プロファイル2を期待すべきではないように、 profile1)を作成します。

したがって、this article,ごとに関係を作成しようとしています。 makemigrations

、私はエラーが発生します:私は間違って

ERRORS: 
<function ManyToManyField.contribute_to_class.<locals>.resolve_through_model at 0x1044b47b8>: (models.E022) <function ManyToManyField.contribute_to_class.<locals>.resolve_through_model at 0x1044b47b8> contains a lazy reference to user_profile.pair, but app 'user_profile' doesn't provide model 'pair'. 
user_profile.Profile.pair: (fields.E331) Field specifies a many-to-many relation through model 'Pair', which has not been installed. 

何をしているのですか?あなたは間違ってやっている事は、あなたが他のモデルとの関係を呼び出す前に、モデルを言及する必要がありますされ

答えて

1
class Pair(models.Model): 
    requester = models.ForeignKey(Profile, related_name='pairing_requester') 
    accepter = models.ForeignKey(Profile, related_name='pairing_accepter') 
    requester_learns = models.CharField(max_length=60, null=True) 
    requester_teaches = models.CharField(max_length=60, null=True) 

class Profile(models.Model): 
    user = models.OneToOneField(settings.AUTH_USER_MODEL, 
           on_delete=models.CASCADE, 
           null=True, blank=True) 
    pair = models.ManyToManyField('self', through='Pair', 
            symmetrical=False, 
            related_name='pair_to+') 

、Djangoは他のモデルにモデルがインストールされます、最初のペアモデルを作成します。これを使用してマイグレーションを行う前に、古いマイグレーションファイルを削除してください。

+0

それで、それらを別のmodels.pyファイルに保存する方法はありませんか? – Homer

+0

あなたはそれを保つことができますが、最初にテーブルを作成する必要があります。そうしないと、djangoはリレーションを作成するときにテーブルが存在しないため、テーブルをリレーションも作成しません。 – Exprator

+0

私は最初にPairモデルを移行するだけで、同じエラーが発生します。それは、ペアモデルをプロファイルモデルの文字列として指定することに関連していますか? – Homer