Django-获取外键模型

时间:2011-10-02 16:48:11

标签: django django-models django-admin django-forms

如何获取外键模型类型?

例如:

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中获取类别模型。

我该怎么做?

4 个答案:

答案 0 :(得分:25)

尝试:

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

编辑:

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

答案 1 :(得分:11)

ForeignKeys是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对象。

答案 2 :(得分:7)

对于Django&gt; = 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'

答案 3 :(得分:0)

也适用于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'