Django-获取外键模型
Posted
技术标签:
【中文标题】Django-获取外键模型【英文标题】:Django- Get Foreign Key Model 【发布时间】:2011-11-29 11:25:07 【问题描述】:如何获取外键模型类型?
例如:
class Category(models.Model):
name = models.CharField(max_length = 100)
class SubCategory(models.Model):
category = models.ForeignKey(Category)
title = models.CharField(max_length = 100)
我想在子类别中获取类别模型。
我该怎么做?
【问题讨论】:
你是什么意思?你想得到班级类型吗? 我就是想得到没有任何实例的类类型。 【参考方案1】:试试:
subcategory = SubCategory.objects.get(pk=given_pk)
subcategory.category
编辑:
subcategory._meta.get_field('category').rel.to
【讨论】:
哦...那么很简单:总是Category。 在跟我开玩笑吗?这是一个样本。我想要动态获取外键! 你说的是真的。非常感谢你:-)【参考方案2】:外键是ReverseSingleRelatedObjectDescriptor
对象。所以这就是你真正正在使用的东西。如果你运行type(SubCategory.category)
,你会得到它。从这里您可以使用两种方法来获取实际引用的类/模型。
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
对象。
【讨论】:
【参考方案3】:对于 Django>=2.0
>>> SubCategory._meta.get_field('category').remote_field.model
>>> 'my_app.models.Category'
要获取模型名称,请使用 __name__
类属性。
>>> SubCategory._meta.get_field('category').remote_field.model.__name__
>>> 'Category'
【讨论】:
【参考方案4】:也适用于 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'
【讨论】:
以上是关于Django-获取外键模型的主要内容,如果未能解决你的问题,请参考以下文章