2010-12-13 6 views
1

특정 장고 모델에서 모든 필드를 얻는 쉬운 방법이 있나요 외계인을 통해 설정된 필드 또는 다른 관계의 많은 필드가 많음?장고 - 모델에서 모든 필드를 얻는 방법

예 :

class A(models.Model): 
    some_number = models.IntegerField() 

class B(models.Model): 
    link_to_a = models.ForeignKey(A, related_name="link_to_b") 

A의 메소드를 호출은 id, some_number, link_to_b을 반환합니다.

답변

2

당신은 모델 클래스의 _meta 특성에 반 문서화, 비공개 API를 사용할 수 있습니다

from myapp.models import A 

for f in A._meta._fields(): 
    print f.name 

(참고,이 API를 문서화하는 장고의 기존 작업 항목이 있습니다 : http://code.djangoproject.com/ticket/12663)

수동으로 관계를 따라야하고 필드 이름을 가져와야합니다. 매우 미등록 A._meta.fields에

from myapp.models import A 

for f in A._meta._fields(): 
    print f.name 

    if hasattr(f, 'rel'): 
     print "Grab more fields from " + rel.to.name 
     g in rel.to._meta._fields(): 
      print g.name 
+0

이것은 모델 자체의 필드만을 반환합니다. –

+0

업데이트 된 필드에서 "rel"속성을 찾아 관련 모델을 찾은 다음 필드를 이동할 수도 있습니다. –

+0

도움에 감사드립니다. 유용하지만 여전히 문제를 해결하지는 못합니다. 모델 B의 필드는 A 필드의 트리에 나열되어 있지 않기 때문에 발견되지 않습니다 (B에서 선언 되었기 때문에 A에 있지 않습니다). –

0

찾는 :

관계 필드는 rel 속성을 갖

ForeignKeys를

= [F A._meta.fields에 대한 F F 만약 .attname.endswith ('_ id')]

필드에는 dir()을 사용하거나 소스를 읽는 등 다양한 흥미로운 방법이 있습니다.

관련 문제