2011-03-21 2 views
0

두 모델/테이블에서 보고서를 생성하려고합니다. 여기에 그들이있다 :장고 외래 키

class Members(models.Model): 
    username   = models.CharField(max_length=30,null=True, unique=True) 
    email    = models.CharField(max_length=100,null=True, unique=True) 
    name    = models.CharField(max_length=30,null=True) 
    phone    = models.CharField(max_length=30,null=True) 

class Report(models.Model): 
    report_text = models.CharField(max_length=500) 
    reporter_id = models.IntegerField(db_index=True) 
    reported_id = models.IntegerField(db_index=True) 
    date_created = models.DateTimeField(null=True) 
    date_read  = models.DateTimeField(null=True) 

2 개 개의 테이블이 분명히 기본 키로 자동 증가 ID를 가지고있다.

보고서는 다음과 같이 표시됩니다

Reported Phone | Reported Name | Report | Date Reported | Date Report Read 

모두는 회원 테이블에있을 것입니다에보고했다. 리포터 ID는 보고서를 기록한 구성원의 ID입니다. reported_id는 보고서가있는 사람의 ID입니다. 회원 이름과 전화 번호를 얻으려면 2 가지 모델을 통해 가입해야합니다. 나는 그것을 문서 양식에서 해결할 수 없다. 내가보고 된 ID와 reporter_id 두 외래 키를 구성원 테이블의 기본 키 ID 필드에 만들어야한다고 생각합니다. 특정 리포터가 제출 한 모든 항목에 대해 보고서를 추출하는 코드는 어떻게 작성합니까?

사용자는 reported_id = models.ForeignKey (Members)이며 reporter_id에 대해서도 동일한 작업을 수행합니다. 내가 필드가 외국이 아닌 필드를 지정하지 않으면 이상하게 보입니다. ORM은 그것을 더 쉽게 만들어야합니다 (보통 그렇습니다!). 나는 SQL에서 조인으로 할 수 있지만, 저에게 난처한 상황이 있습니다.

질문이 의미가되기를 바랍니다.

+0

하여 해당 외래 키를 통해 모든 관련 Report 모델에 액세스 할 수 있습니다' ForeignKey' 필드는 모델 간의 일대 다 관계를 나타내려고합니다. –

답변

0

리치 사전에

덕분에 어떻게 그렇게 할 어떤 코드가 특정 기자에 의해 제출 된 모든 항목 에 대한 보고서를 추출 할 것인가?

reported_id = models.ForeignKey(Members)

이 필드는 당신이 하나를 지정하지 않았기 때문에 귀하의 경우 id에 기본 키, 대상 모델이 될 것입니다 않습니다.

역 외래 키 접근 자의 이름 충돌을 방지하려면이 필드 중 하나에 related_name을 지정해야합니다.

외래 키 필드를 설정 한 후 해당 외래 키를 통해 관련된 모든 개체를 얻으려면 related_name을 사용하여 관련 모델을 쿼리하십시오. 당신이 당신의 모델을 설정 한 경우 예를 들어

http://docs.djangoproject.com/en/dev/topics/db/queries/#following-relationships-backward

, 같은 :

reporter = models.ForeignKey(Members, related_name="reports_by_me") 
reported = models.ForeignKey(Members, related_name="reports_by_others") 

당신은 당신은 확실히해야

member_instance.reports_by_me.all() 
member_instance.reports_by_others.all() 
+0

ForeignKey는 반드시 '보고'라고해야합니까? 그러면 기본 데이터베이스 필드로'reported_id'가 사용됩니다. –

+0

아하하, 당신은 절대적으로 맞습니다. Facepalm! –