我有以下代码,我从linkedin api
获取并解析数据Experience.objects.get_or_create(user=User.objects.get(id=request.user.id),
company=company,
title=i.find('title').text,
start_month=i.find('start-date').find('month').text,
start_year=i.find('start-date').find('year').text,
end_month=i.find('end-date').find('month').text,
end_year=i.find('end-year').find('year').text,
description=i.find('summary').text)
但是,在end和我的数据库中,end_month和end_year等日期值不是必需的。但是,当我使用代码时,它说
'NoneType'对象没有属性'find'
因为position在xml中没有start_month。
所以我应该检查一下我是否可以从xml获得end_month或end_year,如果没有,我将使用null end_year创建对象。
有什么想法吗?
答案 0 :(得分:0)
是的,如果它们不存在于linkedin的数据中,则将值设置为None,例如
if i.find('end-date')
end_month = i.find('end-date').find('month').text
else:
end_month = None
if i.find('end-year'):
end_year = i.find('end-year').find('year').text
else:
end_year = None
Experience.objects.get_or_create(
user=User.objects.get(id=request.user.id),
company=company,
title=i.find('title').text,
start_month=i.find('start-date').find('month').text,
start_year=i.find('start-date').find('year').text,
end_month=end_month,
end_year=end_year,
description=i.find('summary').text)
linkedin是否为其数据提供唯一ID?如果是这样,您应该将其存储在数据库中并使用它来识别Experience
对象 - 否则,如果某些内容发生变化,您最终会在数据库中出现重复项。
答案 1 :(得分:0)
是的,如果你想避免尝试,你可以这样做:
Experience.objects.get_or_create(
user=User.objects.get(id=request.user.id),
company=company,
title=i.find('title').text,
start_month=i.find('start-date').find('month').text,
start_year=i.find('start-date').find('year').text,
end_month=i.find('end-date') and i.find('end-date').find('month').text,
end_year=i.find('end-year') and i.find('end-year').find('year').text,
description=i.find('summary').text
)
注意
i.find('end-date') and i.find('end-date').find('month').text
将返回
i.find('end-date').find('month').text
如果
i.find('end-date')
不是无。
我认为这符合您的需求。