2011-10-02 10 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 

EDIT:

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

ああ...それから、非常に単純です:常にカテゴリ。 –

+0

こんにちは?それはサンプルです。私は外部キーを動的に取得したい! –

+4

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

9

のForeignKeyはReverseSingleRelatedObjectDescriptorオブジェクトです。それで、あなたが本当に働いているのです。 type(SubCategory.category)を実行すると、それが表示されます。ここから、2つの方法で実際のクラス/モデルを取得することができます。あなたは実行時までの属性名がわからない場合

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__ 

、そのForeignKeyのフィールドのためにあなたのReverseSingleRelatedObjectDescriptorオブジェクトを取得するにはgetattr(SubCategory, attributeNameVariable)を使用しています。

関連する問題