2009-12-17 7 views
0

원하는 것을 할 수 있지만, 당신은 분명이 순서를 할 수 없어 실현하기 :내가이 내가 (전에 한 것입니다

class MasterAdmin(models.Model): 
    """ 
    A permanent admin (one per Account) that shouldn't be deleted. 
    """ 
    admin = models.OneToOneField(AccountAdmin) 

class Account(models.Model): 
    """ 
    A top-level account in the system. 
    """ 
    masteradmin = models.OneToOneField(MasterAdmin) 


class AccountAdmin(models.Model): 
    """ 
    An Account admin that can be deleted. This includes limited permissions. 
    """ 
    account = models.ForeignKey(Account) 

난 당신이 무엇을 볼 수 있다고 생각 I 이 예제에서 수행하고 싶은 것은, AccountAdmin의 속성을 공유하는 MasterAccountAdmin을 가지고 싶습니다.이 목적은 MasterAccountAdmin이 아닌 AccountAdmin을 삭제할 수있는 권한을 부여하려는 것입니다. "master = models.BooleanField()"라고하는 AccountAdmin에서

이 예제는 MasterAdmin이 AccountAdmin befo를 참조하기 때문에 작동하지 않습니다. 그것의 창조를 재현하지만 나는 달성하려는 것을 보여주고 싶었습니다. 나는이 모든 잘못을 생각하고 있나?

+2

-1 : 정말 가난한 질문 제목. 제목을 진짜 질문으로 고쳐 주시겠습니까? 아마도 "순환 참조가있는 세 개의 모델을 정의하는 방법"또는 문제를 설명하는 것이 겠지요. –

+0

코드에만 집중하기 전에 질문을 읽으면 괜찮은 제목이됩니다. 기술적으로 어떻게 코드를 작성 하는지를 묻지는 않습니다. 달성하고자하는 고차원 목표를 달성하기 위해 모델을 작성하는 좋은 방법은 무엇인지 묻고 있습니다. – orokusaki

답변

3

왜 그냥 is_master를 AccountAdmin의 속성으로 만든 다음 delete() 메서드를 재정 의하여 is_master가 true가 아닌지 확인하십시오.

+0

이것은 OP가 수행하는 것보다 나은 접근 방법이지만, 전방 참조와 관련된 그의 질문에 대답하고 싶습니다. – cethegeek

+0

오, 좋은 지적이야. 나는 그 질문을 보지 못했던 아키텍쳐에 너무 바빴다. (그리고 나는 장고에서 처음으로 작업했을 때 겪었던 문제였다.) – Tom

2

전달 참조가 있으면 따옴표를 사용하십시오.

See the docs.

아직 정의되지 않은 모델에 관계를 만들어야하는 경우, 당신은 모델이 아닌 모델 객체 자체의 이름을 사용할 수 있습니다 ...

+0

감사합니다. BTW,이 매우 Pythonic 할 (이것은 따옴표로) 무엇입니까? – orokusaki

+2

이런 종류의 관계를 수용하기 위해 장고의 특별한 특징이 있습니다. 완벽하게 받아 들일 만 한 연습이지만 파이썬에서는 명시 적으로 지원하지 않습니다. – jcdyer

+0

jcd가 말한 바 있습니다. 내 대답을 업데이트하여 문서에 대한 링크를 만들었습니다. – cethegeek

관련 문제