我想从包含基本相同信息的不同API中提取信息,并将它们收集到通用模型中。
我如何创建映射以使关系更容易?
例如,目前我有一个'Contact_API_A'模型:
class ContactAPIA(models.Model):
id = models.CharField(primary_key=True, max_length=100)
name = models.CharField(max_length=50)
'Contact_API_B'模型:
class ContactAPIB(models.Model):
UUID = models.CharField(primary_key=True, max_length=100)
full_name = models.CharField(max_length=50)
这些模型包含API的命名约定。
和一个使用我自己的命名约定的'Contact'模型:
class Contact(models.Model):
id = models.CharField(primary_key=True, max_length=100)
full_name = models.CharField(max_length=50)
source = models.CharField(max_length=10)
在我看来,我从各自的API&使用字典将它们保存在模型中。
的观点:
def get_contacts_API_A(request):
...
contacts_api_a = API_A.contacts()
for contact in contacts_api_a:
contact_api_a_dict = {
'id':contact.id,
'name':contact.name}
c = ContactAPIA(**contact_api_a_dict)
c.save()
在第二步中,我将这些连接插入到我的通用联系模型中。 的观点:
def contacts_api_a_to_contacts(request):
...
contacts = ContactAPIA.objects.all()
for contact in contacts:
contact_api_a_to_contacts_dict = {
'id':contact.id,
'full_name':contact.name,
'source':'api_a'}
c = Contact(**contact_api_a_to_contact_dict)
c.save()
实际的联系词典包含更多信息,因此我尝试将它们移动到'mapping.py'文件并将该文件导入视图。 这样做时我得到的错误是“联系人”这个名字没有定义。
mapping.py:
contact_api_a_dict = {
'id':contact.id,
'name':contact.name}
错误对我有意义,因为未定义“联系人”。我怎么还能使用这样的映射文件来保持我的观点更整洁,并更好地了解不同的领域?
或者是否存在另一种映射信息的方法,例如使用映射模型或类似的东西?
谢谢!
答案 0 :(得分:0)
您可以使用一些常量和字典理解来提取数据。例如:
MAPPING = (
('id', 'id'),
('full_name', 'name'),
)
# ...
contact_api_a_to_contact_dict = {target: getattr(contact, src) for target, src in MAPPING}