2017-03-03 1 views
1

에 순환 참조 이것은 내 모델 같은 모습입니다 :장고는 다 대다 관리자

class GameStates(models.Model): 
    state_code = models.CharField(max_length=20) 
    state_name = models.CharField(max_length=100) 
    order = models.IntegerField() 
    allowed_states = models.ManyToManyField('GameStates', related_name='allowed_states_admin') 

    def __str__(self): 
     return self.state_code 

allowed_statesGameStatesmany-to-many 순환 참조가 있습니다. 이 필드에는 다음 정보가 들어 있습니다. 사용자의 현재 상태가 주어지면 그가 허용되는 다른 상태는 무엇입니까?

나는 다음과 같이 Admin에이 모델을 등록하려고 :

class GameStatesInline(admin.TabularInline): 
    model = GameStates.allowed_states.through 


@admin.register(GameStates) 
class GameStatesAdmin(admin.ModelAdmin): 
    inlines = [GameStatesInline] 
    exclude = ('allowed_states',) 

을 그러나, 나는 다음과 같은 오류 메시지가 계속 :
GameStates_allowed_states' has more than one ForeignKey to 'GameStates'.

당신의 도움을 주셔서 감사합니다겠습니까!

답변

1

Model1에서 Model2로 ManyToManyField를 작성하면 통과 테이블에 Model1에 대한 하나의 ForeignKey와 Model2에 대한 하나의 ForeignKey가 생깁니다.

GameStates에서 GameStates로 ManyToManyField를 작성하면 through 테이블에 GameStates에 대한 2 개의 ForeignKeys가 생깁니다. 이러한 ForeignKey 관계에 'related_name'이 없으면이 모델 클래스를 준비 할 수 없습니다.

"GameStates.allowed_states.through"를 통해 테이블을 생성하면 ForeignKey 필드에 대한 관련 이름이 없습니다.

나는 당신이 자세히 설명해 수 있습니다, 당신은 writing another class으로 테이블을 통해 정의하고 테이블을

class AllowedStates(models.Model): 
    game_state = models.ForeignKey('GameState', related_name='something') 
    allowed_state = models.ForeignKey('GameState', related_name='something_else') 

을 통해에 해당하는 모델의 ForeignKeys를에 related_name를 지정해야합니다 그리고 당신은 관리자

+0

안녕 Vinayak에 AllowedStates을 등록 할 수 있습니다 생각 다른 수업을 만드는 것이 무엇을 의미합니까? 시작하는 데 도움이되는 몇 가지 샘플 코드를 알려주십시오. 감사. –

+0

@ TheWanderer 답변을 수정했습니다. 지금은 더 분명해지기를 바랍니다. –