使用“映射字典”使用django

时间:2016-12-22 11:26:52

标签: python django dictionary django-models mapping

我想从包含基本相同信息的不同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}

错误对我有意义,因为未定义“联系人”。我怎么还能使用这样的映射文件来保持我的观点更整洁,并更好地了解不同的领域?

或者是否存在另一种映射信息的方法,例如使用映射模型或类似的东西?

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用一些常量和字典理解来提取数据。例如:

MAPPING = (
  ('id', 'id'),
  ('full_name', 'name'),
)

# ...

contact_api_a_to_contact_dict = {target: getattr(contact, src) for target, src in MAPPING}