获取模型外键名称和值?

时间:2018-09-05 09:11:11

标签: django django-models foreign-keys

我有以下模型:

class Item(models.Model):
    owner = models.ForeignKey(Owner, on_delete=models.CASCADE)

我想编写一个通用函数/实用程序来获取外键名称和值,并将其作为参数传递给另一个函数:

在下面的代码中,我得到了FK

for field in self._meta.get_fields(include_parents=False):
            if isinstance(field, models.ForeignKey):
...........

function f2 ({fk_name:value, fk_name2:value})

如何获取名称(所有者)和值(owner_id)?

2 个答案:

答案 0 :(得分:2)

ForeignKey对象具有属性attname,该属性指定包含其所引用主键值的属性名称。

对于您的owner,如果您不进行任何更改,则field.attname的值将为owner_id

我们可以定义一个字典,将ForeignKey的名称映射到存储主键的属性,例如:

{
    field.name: field.attname
    for field in self._meta.get_fields(include_parents=False)
    if isinstance(field, models.ForeignKey)
}

对于您的模型,这将生成一个字典:

{'owner': 'owner_id'}

答案 1 :(得分:1)

for field in self._meta.get_fields(include_parents=False):
    if isinstance(field, models.ForeignKey):
        print(field.name, getattr(self, field.name, None))

这有效