2017-12-05 2 views
0

두 개의 Profile 모델 객체가 Pair 모델 객체의 일부가되도록 허용하는 시스템을 구현하려고합니다. 여기 '통과'모델이 마이 그 레이션에서 오류를 반환하는 다 대다 관계

이 페어 모델이어서 단면도이다

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, PROFILE2)의 고유 목적이되도록해야하며, I는 (PROFILE2 기대하지 않아야 profile1)을 만듭니다.

따라서 this article,마다 관계를 만들려고합니다.

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. 

내가 잘못 뭐하는 거지 : makemigrations

, 나는 오류가 발생입니까?

답변

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+') 

당신이 잘못하고 다른 모델의 관계를 호출하기 전에 모델을 언급 할 필요가있다하는 것은, 장고는 다른 모델에 모델을 설치합니다 먼저 PAIR 모델을 생성합니다. 그래서 이것을 사용하고 마이그레이션을하기 전에 이전 마이 그 레이션 파일을 삭제하십시오.

+0

그런 다음 다른 models.py 파일에 보관할 방법이 없습니까? – Homer

+0

당신은 그것을 지킬 수는 있지만 그것을 만들기 전에 먼저 테이블을 만들 필요가있다. 그렇지 않으면 django는 릴레이션을 만들 때 테이블이 존재하지 않기 때문에 어떤 테이블에 관계를 만들지 이해하지 못한다. – Exprator

+0

나는 마이 그 레이션 및 마이 그 레이션 쌍을 처음으로 혼자하지만 동일한 오류가 발생합니다. 프로필 모델에서 쌍 모델을 문자열로 지정하는 것과 관련이 있습니까? – Homer