2017-01-17 31 views
0

同じモデルの2つのフィールドに同じ外部キーを使用しようとしていますが、エラーが発生しています。Django - 同じモデルに複数の外部キーを使用する

イムは、コール・ユーザーのプライマリとセカンダリを持ってしようとしているが、あなたは両方のForeignKeys列に異なるrelated_nameを定義する必要が

class ManualRotas(models.Model): 
    rota_name = models.CharField(max_length=200,choices=settings.ONCALL_ROTAS) 
    primary_user = models.ForeignKey(User, unique=True, verbose_name="Primary OnCall Engineer") 
    p_start_time = models.DateTimeField(verbose_name="Start Time") 
    p_end_time = models.DateTimeField(verbose_name="End Time") 
    secondary_user = models.ForeignKey(User, verbose_name="Backup OnCall Engineer", unique=True,blank=True,null=True) 
    s_start_time = models.DateTimeField(blank=True,null=True, verbose_name="Start Time") 
    s_end_time = models.DateTimeField(blank=True,null=True,verbose_name="Start Time") 


ERRORS: 
oncall.ManualRotas.primary_user: (fields.E304) Reverse accessor for 'ManualRotas.primary_user' clashes with reverse accessor for 'ManualRotas.secondary_user'. 
     HINT: Add or change a related_name argument to the definition for 'ManualRotas.primary_user' or 'ManualRotas.secondary_user'. 
oncall.ManualRotas.secondary_user: (fields.E304) Reverse accessor for 'ManualRotas.secondary_user' clashes with reverse accessor for 'ManualRotas.primary_user'. 
     HINT: Add or change a related_name argument to the definition for 'ManualRotas.secondary_user' or 'ManualRotas.primary_user'. 

WARNINGS: 
oncall.ManualRotas.primary_user: (fields.W342) Setting unique=True on a ForeignKey has the same effect as using a OneToOneField. 
     HINT: ForeignKey(unique=True) is usually better served by a OneToOneField. 
oncall.ManualRotas.secondary_user: (fields.W342) Setting unique=True on a ForeignKey has the same effect as using a OneToOneField. 
     HINT: ForeignKey(unique=True) is usually better served by a OneToOneField. 

System check identified 4 issues (0 silenced). 
+3

ヒント: 'ManualRotas.secondary_user' の定義にrelated_name引数を追加または変更したり、 'ManualRotas.primary_user'。 – e4c5

+0

あなたが受け取ったエラーを読んでいますか?あなたはそれが何を言っているのか研究しようとしましたか?あなたはヒントに従ってみましたか? – Sayse

+0

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

答えて

2

以下のエラーを受け取った後の関係をどのようにフォーマットするかを確認していません。たとえば:

をリレーション先のオブジェクトから逆に使用する名前:

class ManualRotas(models.Model): 
    primary_user = models.ForeignKey(User, related_name='related_primary_manual_roats', unique=True, verbose_name="Primary OnCall Engineer") 
    #       related names^v 
    secondary_user = models.ForeignKey(User, related_name='related_secondary_manual_roats', verbose_name="Backup OnCall Engineer", unique=True,blank=True,null=True) 
    # .... Other columns 

も述べていた、ForeignKey.related_name documentを参照してください。また、related_query_nameのデフォルト値(ターゲットモデルからの逆フィルター名に使用する名前)です。詳しい説明と例については、関連オブジェクトのドキュメントを参照してください。抽象モデルでリレーションを定義するときは、この値を設定する必要があります。あなたがそうするとき、いくつかの特別な構文が利用可能です。


関連記事:

+0

ありがとう、それはトリックでした – AlexW

関連する問題