2015-01-16 2 views
0

외래 키가있는 데이터베이스에 외래 키가있는 테이블을 만들려고합니다.
플레이어 테이블에 팀 테이블에 대한 외부 키가 있고 팀 테이블에 플레이어 테이블에 대한 외부 키가 있습니다.다른 테이블을 참조하는 외래 키가있는 두 개의 테이블 NameError

class Player(Model): 
    nickname = CharField(max_length=30) 
    steam_id = CharField(max_length=15) 
    team = ForeignKeyField(Team) 
    class Meta: 
     database = db 

class Team(Model): 
    name = CharField(max_length=30) 
    captain = ForeignKeyField(Player) 
    class Meta: 
     database = db 
Player.create_table() 
Team.create_table() 

누군가가 나를 도울 수 : 난 내 코드를 실행하면 난 내 코드는 다음 NameError: name 'Team' is not defined
받고 있어요? :)

+0

내가 peewee 만 SQL을 모르겠어요하지만 당신은/테이블에 "클래스"에 FK를 설정할 수 SQL에 존재하지 않습니다. 나는 그것이 같다고 생각한다. 두 클래스를 모두 생성 한 후에 FK를 추가하려고 할 수 있습니다. 이 외에도 플레이어, 팀 및 캡틴의 3 가지 속성이있는 'TeamPlayer'클래스를 수행 할 수 있습니다. 그래서 당신은 교차하는 FK를 피하십시오 – bish

+0

빠른 답께 고마워요! 팀, "setattr (팀,"캡틴 ", ForeignKeyField (플레이어))','setattr (플레이어,"팀, ForeignKeyField (팀))'문제를 해결했습니다 : – KsaneK

+0

이 방법은 실제로 특정 후크 때문에 잘 작동하지 않습니다 메타 클래스/모델 클래스 생성 중에 실행됩니다. 대신 동적으로 필드를 추가하려면 "field.add_to_class (model_class, field_name)"을 호출해야합니다. 이렇게하면 속성을 올바르게 설정하고 후크를 실행합니다. * 최고/정답 *은 아래 답변 섹션에 나열되어 있습니다. – coleifer

답변

1

Team을 정의하기 전에 TeamPlayer에 참조하기 때문에이 오류가 발생합니다. 여기에는 순환 의존성이 있습니다. TeamPlayer에 종속이고 PlayerTeam에 종속됩니다.

첫 번째 제안은 종속성 중 하나를 삭제하는 것입니다. 두 테이블 모두에서 다른 테이블에 대한 참조가 필요합니까? 당신이 경우에

는 다음 peewee 문서는이 상황 처리에 전념 전체 섹션이 있습니다 http://peewee.readthedocs.org/en/latest/peewee/models.html#circular-foreign-key-dependencies

+0

원형 FK를 처리하는 올바른 방법입니다. – coleifer

관련 문제