Python Django根据字典值动态添加字段

Python Django根据字典值动态添加字段,python,django,Python,Django,我正试图重构一些代码,使之枯燥乏味 我有一个导入器,它从一个API导入,该API的键与目标不同 工作代码如下所示: this_event = AnEvent() wp_event = Requests.get('someurl').json() if 'title' in wp_event.keys(): this_event.name = wp_event['title'] if 'description' in wp_event.keys(): this_event.desc

我正试图重构一些代码,使之枯燥乏味

我有一个导入器,它从一个API导入,该API的键与目标不同

工作代码如下所示:

this_event = AnEvent()
wp_event = Requests.get('someurl').json()
if 'title' in wp_event.keys():
    this_event.name = wp_event['title']
if 'description' in wp_event.keys():
    this_event.description = wp_event['description']
... and so on
我想做的是:

scrape_fields  = [
    {
        'wp' : 'description',
        'django' : 'description'
    },
    {
        'wp' : 'title',
        'django' : 'name'
    }
    ... etc
]
for field in scrape_fields:
    if field['wp'] in wp_event.keys():
        # I knew this would not work when I wrote it but not sure what to do
        this_event[field['django']] = wp_event[field['wp']]
但Django抛出了一个异常:

'AnEvent' object does not support item assignment
是否有人能够建议如何像这样动态地分配给字段?

您需要
setattr()


要使用
str
类型值来引用字段名来动态分配任何Python对象的成员值,需要使用Python的内置函数
setattr
。基本上,这一行:

this_event[field['django']] = wp_event[field['wp']]
可以使用
setattr
将其重写为:

setattr(this_event, field['django'], wp_event[field['wp'])
setattr(this_event, field['django'], wp_event[field['wp']])

阅读:。

是否存在重复的
'wp'
s或
'django'
s值?如果没有,我们可以提高这方面的性能。