外部キーモデルタイプを取得するにはどうすればよいですか?
例えば:
class Category(models.Model):
name = models.CharField(max_length = 100)
class SubCategory(models.Model):
category = models.ForeignKey(Category)
title = models.CharField(max_length = 100)
サブモデルのカテゴリモデルを取得します。
どうすればできますか?
試してください:
subcategory = SubCategory.objects.get(pk=given_pk)
subcategory.category
編集:
subcategory._meta.get_field('category').rel.to
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
オブジェクトを取得します。
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'
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'