2011-10-02 4 views
19

외래 키 모델 유형을 얻으려면 어떻게해야합니까? 예를 들어Django- 외래 키 모델 얻기

는 :

class Category(models.Model): 
    name = models.CharField(max_length = 100) 

class SubCategory(models.Model): 
    category = models.ForeignKey(Category) 
    title = models.CharField(max_length = 100) 

나는 하위 범주 분류 모델 싶어.

어떻게하면됩니까?

+0

무슨 뜻입니까? 클래스 유형을 얻고 싶니? –

+0

모든 인스턴스없이 클래스 유형을 정확히 얻고 싶습니다. –

답변

21

시도 :

subcategory = SubCategory.objects.get(pk=given_pk) 
subcategory.category 

편집 :

subcategory._meta.get_field('category').rel.to 
+0

아 ... 그럼 아주 간단합니다 : 항상 카테고리. –

+0

나를 놀리는가? 그것은 샘플입니다. 나는 외적 열쇠를 역동적으로 얻고 싶다! –

+4

'subcategory._meta.get_field ('category'). rel.to' –

9

ForeignKeys를가 ReverseSingleRelatedObjectDescriptor 개체입니다. 그래서 그게 당신이 정말로 함께 일하는 것입니다. type(SubCategory.category)을 실행하면 얻을 수 있습니다. 여기에서 두 가지 방법을 사용하여 실제 클래스/모델을 가져올 수 있습니다. 당신은 런타임까지 속성 이름을 모르는 경우

SubCategory.category.field.rel.to # <class 'path.to.Model'> 
SubCategory.category.field.rel.to.__name__ # 'Category' 

# or these will do the same thing 

SubCategory._meta.get_field('category').rel.to 
SubCategory._meta.get_field('category').rel.to.__name__ 

, 그 외래 키 필드에 대한 귀하의 ReverseSingleRelatedObjectDescriptor 개체를 가져 getattr(SubCategory, attributeNameVariable)를 사용합니다.