python - 如何动态访问 ForeignKey 对象的属性
问题描述
我目前正在尝试to
在 for 循环中访问 ForeignKey 属性,因为我要求它是动态的。django 的文档和在线搜索都没有提供任何有用的结果。这是我正在使用的:带有 Django CMS 3.5.2 和 Django 国家包的 Django 1.11。错误信息是:
AttributeError: 'ForeignKey' object has no attribute 'to
但是,访问字段的名称或 verbose_name 甚至选择属性(对于 charFields 或 IntegerFields)都有效。
模型.py
company = models.ForeignKey(verbose_name=_('Company'), blank=False, null=False, to='accounts.CompanyName',
on_delete=models.CASCADE)
视图.py
def generate_view(instance):
model = apps.get_model(app_label='travelling', model_name=str(instance.model))
data = dict()
field_list = eval(instance.fields)
fields = model._meta.get_fields()
output_list = list()
for field in fields:
for list_field in field_list:
if field.name == list_field:
options = list()
if field.__class__.__name__ == 'ForeignKey':
print(field.to) # Here's the error
elif field.__class__.__name__ == 'CountryField':
for k, v in COUNTRIES.items():
options.append((k, v)) # Works properly
elif field.__class__.__name__ == 'ManyToManyField':
pass # Yields the same issues as with foreign keys
output_list.append({
'name': field.name,
'verbose': field.verbose_name,
'options': options,
'type': field.__class__.__name__
})
return data
解决方案
如您所见,没有一个名为to
. 这是初始化程序的参数名称。ForeignKey
由于参数可以是字符串模型引用,或者"self"
,表示实际模型目标的属性应该具有不同的名称是有意义的。
Field 属性参考定义了用于自省字段对象的API。你所追求的是这样的:
if field.many_to_one:
print(field.related_model)
推荐阅读
- database - 'Microsoft.ACE.OLEDB.12.0' 提供程序未在具有 Access 的 VS2019 上的本地计算机上注册
- javascript - 一键跨所有匹配的元素 ID 执行函数
- webassembly - 如何以 WebAssembly 文本格式表示操作?
- c# - 格式化磁盘后找不到我的 SQL Server 数据库
- javafx - 我们可以在不安装 Linux 的情况下从 Windows 构建 Gluon Mobile for Android (APK) 吗?
- javascript - 获取用于评论帖子的帖子 ID,而不将帖子 ID 作为属性存储在 DOM 元素中
- java - 如何在 r2dbc 中实现多对多
- vue.js - ref、toRef 和 toRefs 有什么区别
- java - 使用 Springboot 模式将 xml 解组为 java objectUnexpected elementL 文件
- reactjs - 调整反应应用文本的大小位于导航栏和 sidenav 下