2014-01-05 3 views
0

나는 다음과 같은 관계가 : 이제 문제는 내가 MyAme 즉, 외래 키에 의해 MP의 레코드를 선택하려는이지만, FK가 아닌얻기 장고 기록 외래 키

class AMe(models.Model): 
    Field1     = models.CharField(max_length=50, choices = Field1_CHOICES) 
    Field2     = models.CharField(max_length=50, choices = Field2_CHOICES) 

class MP(models.Model): 
    MyAMeID     = models.ForeignKey(AMe) 
    Field1     = models.CharField(max_length=50, choices = Field1_CHOICES) 

을 AMe의 기본 키와 동일하므로 MP에서 레코드를 선택하는 가장 쉬운 방법은 무엇입니까? 쿼리 세트 및 필터 옵션을 사용해야합니까? 아니면 더 똑똑한 방법, 더 이상 장고 방법이 내가 놓친 적이 있습니까?

답변

3

할 수 있습니다 하나를 사용 my_AMe_object.mp_set.all() (장고가 자동으로 ForeignKey 모델의 이름을 연결하여 필드 역의 관계 생성 - 여기 mp - 그리고 _setrelated_name 필드 속성에 의해 직접 설정할 수 있습니다), 또는 MP.objects.filter(MyAMeID=my_AMe_object). 반대 관계의

사용 예제 :

>>> from test_app.models import AMe, MP 
>>> ame = AMe.objects.create() 
>>> for _ in xrange(6): 
...  MP.objects.create(MyAMeID=ame) 
>>> ame.mp_set.all() 
[<MP: MP object>, <MP: MP object>, <MP: MP object>, <MP: MP object>, <MP: MP object>, <MP: MP object>] 

mp_set가 (일반 Model.objects.all() 방법과 유사) 결과의 수에도 불구하고 QuerySet 객체를 반환합니다.

+0

테이블에 나타나는대로이 MyAMeID_id로 MyAMeID를 추가해야합니까? – disruptive

+0

모델의 인스턴스를'filter'에 전달하는 경우, 필드의 이름을 사용하십시오. 이 경우에는 'MyAMeID'가됩니다. 프라이 머리 키를 넘기는 경우,'MyAMeID_id' (django는'_id'를 후드에 추가합니다)를 사용하십시오. –

+0

흠. 나는이 방법들 중 하나를 작동시키는 것처럼 보이지 않습니다. 그것은, 필터 메서드를 가장 익숙한,하지만 mp_set.all() 다음 오류를 반환합니다 : AMe '개체에'mp_set '특성이 없습니다 – disruptive