web-dev-qa-db-ja.com

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)

サブモデルのカテゴリモデルを取得します。

どうすればできますか?

27
user915370

試してください:

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

編集:

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

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__
_

実行時まで属性名がわからない場合は、getattr(SubCategory, attributeNameVariable)を使用して、そのForeignKeyフィールドのReverseSingleRelatedObjectDescriptorオブジェクトを取得します。

11
JCotton

Djangoの場合> = 2.

>>> SubCategory._meta.get_field('category').remote_field.model
>>> 'my_app.models.Category'

モデル名を取得するには、__name__クラスプロパティ。

>>> SubCategory._meta.get_field('category').remote_field.model.__name__ 
>>> 'Category'
9
jackotonye

Django> = 2.0

>>> SubCategory._meta.get_field('category').related_model
>>> <class 'my_app.models.Category'>
>>> SubCategory._meta.get_field('category').related_model._meta.model_name
>>> 'category'
0
steodatus