class GameClaim(models.Model): target = models.ForeignKey(User) claimer = models.ForeignKey(User) isAccepted = models.BooleanField()
그러면 다음과 같은 오류를 내뱉게 된다.
Accessor for field 'target' clashes with related field 'User.gameclaim_set'. Add a related_name argument to the definition for 'target'.
Accessor for field 'claimer' clashes with related field 'User.gameclaim_set'. Add a related_name argument to the definition for 'claimer'.
일반적으로 FK를 만들면, Django는 gameclaim_set 이라는 reverse relation을 내부적으로 만들게 된다. 그런데, Gameclaim 안에 2개의 FK가 있기때문에 같은 gameclaim_set 이름의 충돌(Crash)이 나는 것이다.
해결책은 이 Reverse relation의 이름을 related_nam
e을 이용하여 강제로 주는 것이다.
class GameClaim(models.Model): target = models.ForeignKey(User, related_name='gameclaim_targets') claimer = models.ForeignKey(User, related_name='gameclaim_users') isAccepted = models.BooleanField()
class User(models.Model): friendship = models.ManyToManyField("User", related_name = 'user_friendship') friendreq = models.ManyToManyField("User", related_name = 'user_friendreq')
'SW > Django' 카테고리의 다른 글
custom django-admin commands 사용하기 (0) | 2013.08.08 |
---|