开发者

Django- Get Foreign Key Model

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):
    cat开发者_StackOverflow社区egory = models.ForeignKey(Category)
    title = models.CharField(max_length = 100)

I Want To Get category Model In SubCategory.

How Can I Do It?


Try:

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

EDIT:

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


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'


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.


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'
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜