Django- Get Foreign Key Model

2020-02-23 05:28发布

How can I Get A Foreign Key Model Type?

For Example:

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

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

I Want To Get category Model In SubCategory.

How Can I Do It?

4条回答
Luminary・发光体
2楼-- · 2020-02-23 06:14

ForeignKeys are ReverseSingleRelatedObjectDescriptor objects. So that's what you are really working with. You'll get that if you run type(SubCategory.category). From here you can use two ways to get the actual Class/Model referred to.

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__

If you don't know the attribute name until run-time, then use getattr(SubCategory, attributeNameVariable) to get your ReverseSingleRelatedObjectDescriptor object for that ForeignKey field.

查看更多
疯言疯语
3楼-- · 2020-02-23 06:15

For Django>=2.0

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

To get the model name use the __name__ class property.

>>> SubCategory._meta.get_field('category').remote_field.model.__name__ 
>>> 'Category'
查看更多
Juvenile、少年°
4楼-- · 2020-02-23 06:18

also for 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'
查看更多
家丑人穷心不美
5楼-- · 2020-02-23 06:24

Try:

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

EDIT:

subcategory._meta.get_field('category').rel.to
查看更多
登录 后发表回答