我有以下模型:
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)?
答案 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))
这有效