开发者

Django- Get Foreign Key Model

开发者 https://www.devze.com 2023-04-10 06:49 出处:网络
How can I Get A Foreign Key Model Type? For Example: class Category(models.Model): name = models.CharField(max_length = 100)

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

精彩评论

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

关注公众号