2014-07-22 3 views
1

필자는 내 모델로 돌아가 테이블이 어떻게 연관되어 있는지 볼 필요가 없도록 관계를 탐색 할 수있는 쉘 유틸리티를 작성 중이다. 이 모든 정보를 얻기 위해 _meta을 사용하고 있습니다. 다음 샘플 모델에서Django _meta many to many

봐 :

class Foo: 
    ... 

class Bar: 
    foo = models.ManyToManyField(Foo) 

이 내가 M2M 분야 찾을 _meta를 사용할 때 발생하는 것입니다 :

In [33]: Bar._meta.many_to_many 
Out [33]: [<django.db.models.fields.related.ManyToManyField: foos>] 
In [34]: Foo._meta.many_to_many 
Out [34]: [] 

는 요청에 의해 [<django.db.models.fields.related.ManyToManyField: bars>]를 반환합니다 뭔가가있다 m2m 관계가 Foo 모델입니까?

답변

1

예. 다음은 모델에 대해 RelatedObject의 목록을 반환합니다. 즉, many-to-many 필드의 반대입니다.

related_objects = Foo._meta.get_all_related_many_to_many_objects() 

필드는 related_object.field으로 액세스 할 수 있습니다. 이 필드는 여전히 에서Bar에서Foo까지이며, 이는 Bar._meta.many_to_many에서 반환 한 필드와 완전히 동일합니다.

모든 대다 필드 또는 모델에서 가리키는 얻으려면, 당신은이 작업을 수행 할 수 있습니다

many_to_many = (Foo._meta.many_to_many 
      + [r.field for r in Foo._meta.get_all_related_many_to_many_objects()]) 
+0

이 작동하지 않습니다. 'get_all_related_many_to_many_objects'는 fk 릴레이션에서 m2m 릴레이션을 얻습니다. 위의 내용을 보면 현재의 예제에서는 작동하지 않습니다. –

+0

@ RyanSaxe 정확히 작동하지 않는 것은 무엇입니까? 내 현재 프로젝트에서 그것은 정확히 예상대로 작동합니다. – knbk

+0

당신이 준 코드는 여전히'[]'를 반환합니다. –