【问题标题】:Django- Get Foreign Key ModelDjango-获取外键模型
【发布时间】: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)

我想在子类别中获取类别模型。

我该怎么做?

【问题讨论】:

  • 你是什么意思?你想得到班级类型吗?
  • 我就是想得到没有任何实例的类类型。

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


【解决方案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'
      

      【讨论】:

        猜你喜欢
        • 2012-05-07
        • 2016-10-24
        • 1970-01-01
        • 2010-12-28
        • 2020-06-30
        • 1970-01-01
        • 1970-01-01
        • 2013-01-17
        • 1970-01-01
        相关资源
        最近更新 更多